我試着用簡單的菜單使用內建select語句回答another SO question。該代碼/etc/passwd
顯示名稱,讓您可以通過給出了一些選擇名稱:爲什麼我的菜單第一次失敗?
PS3="Enter a number: "
select name in $(cut -d: -f1 /etc/passwd) ; do
if [ -n "${name}" ]; then
break
fi
echo "Sorry, please enter a number as shown."
done
echo "Entry from passwd is: ${name}"
的作品除了第一次罰款。當你第一次給出正確答案時,它會要求你再試一次。
我試圖得到第一次更詳細的解釋,但我無法得到一個可重現的廚師書。當你將這些代碼複製粘貼到你的服務器上,並給出正確的答案時,你可能會遇到同樣的問題。當您重複命令(從歷史記錄或新的粘貼)時,代碼現在顯示問題。我試圖通過註銷並登錄(有時可用)或重新啓動來再次解決問題。
我嘗試不同的方式來重現在其他情況下的問題(使用不同的變量名,解封變量,使用值的緩慢清單,select name in $(echo One; sleep 1; echo Two; sleep 2; echo Three; sleep 1);
並打開一個新的外殼。
我搜索了其他的例子有select
,但我。無法找到其他職位的線索像https://stackoverflow.com/a/16750755/3220113和https://askubuntu.com/a/1716
我試圖解決我的代碼同步,這似乎是一個解決方法:
PS3="Enter a number: "
select name in $(cut -d: -f1 /etc/passwd) ; do
# is sync needed here?
sync
if [ -n "${name}" ]; then
break
fi
echo "Sorry, please enter a number as shown."
done
echo "Entry from passwd is: ${name}"
我無法重現電子當我包含同步命令時出錯。同步確實是一個工作補丁,爲什麼我需要在這裏?
我不需要其他方法來編寫菜單。我已經找到了圖形對話框Dialog from bash script,並且正在尋找我自己過於複雜的https://unix.stackexchange.com/a/115371/57293的簡單替換。
'sync'用於刷新緩衝區到文件,它與shell變量無關。 – Barmar
我無法重現該問題。它對我來說是第一次。 http://ideone.com/ogpver – Barmar
好的,我可以通過將命令粘貼到交互式shell中來重現它,而不是在腳本中運行它們。 – Barmar