2016-03-01 162 views
2

好吧,所以我嘗試在基於Ubuntu 14.04的Docker容器中安裝rvm。在這個過程中,我發現,有些人做這樣的事情,以確保泊塢窗命令也是Bash運行:docker Ubuntu的容器:連接到bash的shell仍然啓動shell

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

現在的怪事發生,我希望你們有人能向我解釋:

→ docker run -it --rm d81ff50de1ce /bin/bash 
[email protected]:/# 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 
... 
[email protected]:/# /bin/sh 
sh-4.3# echo $0 
/bin/sh 

有人可以解釋這裏發生了什麼?我知道我可以在我的命令前加上dockerfile w/bash -c,但我想知道這裏發生了什麼,如果可能的話,仍然在dockerfile中丟棄bash -c前綴。

非常感謝, 羅賓

回答

0

這是因爲bash有它試圖如果通過名稱sh開始效仿sh兼容模式,如手冊頁說:

如果bash用名字sh調用,它試圖儘可能地模仿歷史版本sh的啓動 行爲,而 也符合POSIX標準。當調用作爲 交互式登錄殼,或與--login 選項非交互式外殼,它首先讀取和從 /etc/profile中執行命令的嘗試和〜/ .profile中,以該順序。 --noprofile選項 可用於禁止此行爲。當作爲交互式 殼名爲SH的時候,bash尋找變量ENV,擴展,如果它被定義它的 值,並使用擴展的值作爲 文件的名稱,讀取並執行。由於sh調用的shell不是 試圖從任何其他啓動文件讀取和執行命令,所以--rcfile選項不起作用。用名稱sh調用的非交互式shell不會嘗試讀取任何其他啓動文件。當 作爲sh調用時,bash在啓動文件爲 後進入posix模式。