這個問題是類似於這個:https://serverfault.com/questions/342697/prevent-sudo-apt-get-etc-from-swallowing-pasted-input-to-stdin但答案並不令人滿意(追加&&
每行的bash腳本不雅),並不能解釋爲什麼一些用戶可以粘貼/執行多個後續的apt-get install -y
命令,而其他的不能,因爲標準輸出由下一個命令引起。Bash腳本得到打印,而不是被執行
我有一個腳本my_script.sh
:
sudo apt-get install -y graphicsmagick
sudo apt-get install -y libgraphicsmagick++1-dev
...
它只能有兩行以上的sudo apt-get install
東西。這些庫(graphicsmagick等)無關緊要,它可以是任何庫。
當我複製此腳本並粘貼它的內容打壞或只是執行它是這樣的:
cat my_script.sh | sudo -i bash
然後由於某種原因,只有第一線(實:graphicsmagick)得到執行,剩下的只是打印到安慰。它只發生在sudo apt-get install -y
,其他腳本不包含此命令行爲正常。
如果我改變bash
到sh
(這是dash
)我得到預期的行爲:
cat my_script.sh | sudo -i sh
你能解釋一下爲什麼這發生?
回答時,可以請你避免這個問題/評論:
- 你爲什麼做這種方式?
- 管道到你的bash是不是安全
- 其他一些方面是不是安全或hackish的
我只是想知道爲什麼bash
不工作,我期望和sh
一樣。
PS。我使用Ubuntu 14.04,SH是破折號,你可以在這裏看到:
[email protected]:/tmp$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
你怎麼知道'sh'是'dash'? 'ls -l/bin/sh'應該告訴你。你在使用什麼操作系統? – 2014-10-06 21:50:05
@KeithThompson - 是的,它的破折號,ubuntu 14.04,quiestion編輯。 – mnowotka 2014-10-06 22:12:05
可能與您的問題無關,但您不需要在腳本中以及調用'bash'或'sh'時使用'sudo'。 – 2014-10-06 22:19:19