問題:
如果我的程序選擇'-v',它應該打印「再見!」在節目結束時。我可以做到這一點,但它會在開始時打印它。所以我需要一些命令來執行它,如果有的話。或者我該怎麼做?Bash。 getopts命令。選項,將在程序結束時執行某些操作
getopts "v" opt
case ${opt} in
v) echo "Good bye!"
esac
問題:
如果我的程序選擇'-v',它應該打印「再見!」在節目結束時。我可以做到這一點,但它會在開始時打印它。所以我需要一些命令來執行它,如果有的話。或者我該怎麼做?Bash。 getopts命令。選項,將在程序結束時執行某些操作
getopts "v" opt
case ${opt} in
v) echo "Good bye!"
esac
你只設置一個變量,在分析選項,並在腳本的末尾,基於變量的值,你會如果執行所需的操作
say_bye=false
while getopts "v" opt; do
case "$opt" in
v) say_bye=true ;;
esac
done
# do stuff
# and at the end:
$say_bye && echo "Good bye!"
您腳本有多個潛在的終點,你想說再見所有的人,請使用EXIT陷阱
say_bye=false
while getopts "v" opt; do
case "$opt" in
v) say_bye=true ;;
esac
done
end_business() {
$say_bye && echo byebye
}
trap end_business EXIT
# do the rest of your script here ...
假設你-v
意爲「冗長」,我喜歡set -x
在許多腳本中獲取調試輸出。如果你這樣做,你可以用無操作語句這樣,充當讀者時不詳細評論辣椒腳本,但輸出到標準錯誤時冗長是 -
: setting x to "$x"
這很好地與吻合在EXIT上陷阱,正如@glenn已經提到的那樣。因此,
while getopts "v" opt
do case "$opt" in
v) verbose=1 # in case you need other contingent code bits
set -v ;;
esac
done
然後
trap ' : "bye-bye!" ' EXIT
這將無害執行和輸出咱這set -x
關閉。
什麼是「smth」? – maffo
@poixen:可能是「something」的縮寫。我會編輯。 –