簡體   English   中英

docker ubuntu容器:鏈接到bash的shell仍然啟動shell

[英]docker ubuntu container: shell linked to bash still starts shell

好吧,伙計們,所以我嘗試在基於ubuntu:14.04的docker容器中安裝rvm。 在這個過程中,我發現有些人做了這樣的事情,以確保docker命令也與bash一起運行:

RUN ln -fs /bin/bash /bin/sh

現在奇怪的事情發生了,我希望你們中的某個人可以向我解釋:

→ docker run -it --rm d81ff50de1ce /bin/bash
root@e93a877ab3dc:/# ls -lah /bin
....
lrwxrwxrwx  1 root root    9 Mar  1 16:15 sh -> /bin/bash
lrwxrwxrwx  1 root root    9 Mar  1 16:15 sh.distrib -> /bin/bash
...
root@e93a877ab3dc:/# /bin/sh
sh-4.3# echo $0
/bin/sh

有人能解釋一下這里發生了什么嗎? 我知道我可以在dockerfile w / bash -c我的命令前綴,但是我想了解這里發生了什么,如果可能的話,仍然會拋棄dockerfile中的bash -c前綴。

非常感謝,羅賓

這是因為bash有一個兼容模式,它試圖模擬sh如果它是通過名稱sh啟動的,如手冊頁所示:

如果使用名稱sh調用bash,它會嘗試盡可能接近地模仿sh的歷史版本的啟動行為,同時也符合POSIX標准。 當作為交互式登錄shell或帶有--login選項的非交互式shell調用時,它首先嘗試按順序從/ etc / profile和〜/ .profile中讀取和執行命令。 --noprofile選項可用於禁止此行為。 當作為具有名稱sh的交互式shell調用時,bash查找變量ENV,如果已定義則展開其值,並使用擴展值作為要讀取和執行的文件的名稱。 由於以sh調用的shell不會嘗試從任何其他啟動文件讀取和執行命令,因此--rcfile選項無效。 使用名稱sh調用的非交互式shell不會嘗試讀取任何其他啟動文件。 當調用為sh時,bash在讀取啟動文件后進入posix模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM