這裏是一個失敗bash腳本預期文檔未表現
#!/bin/tcsh
#here is some code in tcsh I did not write which spawns many processes.
#let us pretend that it spawns 100 instances of stupid_test which the user kills
#manually after an indeterminate period
/bin/bash <<EOF
#!/bin/bash
while true
do
if [[ `ps -e | grep stupid_test | wc -l` -gt 0 ]]
then
echo 'test program is still running'
echo `ps -e | grep stupid_test | wc -l`
sleep 10
else
break
fi
done
EOF
echo 'test program finished'
的stupid_test程序是由
#!/bin/bash
while true; do sleep 10; done
預期的行爲是運行直到stupid_test被殺死的最小測試用例(在這種情況下由用戶手動),然後在接下來的十秒內終止。觀察到的行爲是腳本不會終止,並且即使在程序被終止之後也評估爲ps -e | grep stupid_test | wc -l
== 1(並且它不再顯示在ps下)
如果bash腳本直接運行而不是在這裏文件,預期的行爲被恢復。
我覺得自己在做一些非常愚蠢的錯事,我根本不是最有經驗的shell黑客。它爲什麼這樣做?
如果你想打電話'bash' ,那麼你需要'/ bin/bash << \ EOF',那麼它不是一個shebang。 '\'因爲你不想在'tcsh'腳本中執行子shell。加上'echo'後面的子shell是無用的 – Bernhard
另外,你在那裏有一些狂野的[無用的反引號](http://partmaps.org/era/unix/award.html#backticks)。 – tripleee
'<<'EOF''可以防止在父shell中發生擴展。 –