
我對 Unix 真的很陌生,目前我需要建立一個別名來檢查檔案是否規則且可讀。如果它不規則,那麼我需要返回 1 作為退出程式碼,而不是測試它是否可讀。如果它不可讀,我需要返回 2 作為退出代碼。
alias test="if [ ! -f filename ] ; then echo 'Irregular file'; exit 1 ; fi; if [ ! -r filename ]; then echo 'Unreadable file'; exit 2; fi;
現在的問題是,當我運行它時,退出將關閉我的整個客戶端。有辦法解決這個問題嗎?
答案1
因為這是在 Google 中進行搜尋時的第一個連結:
如果將出口括在括號中
(exit 2)
然後它將透過退出括號中的子 shell 來設定回傳代碼,並且不會退出目前的 shell。然後您可以使用 $? 測試該程式碼。像平常一樣
alias mytest="if [ ! -f filename ] ; then echo 'Irregular file'; (exit 1) ; elif [ ! -r filename ]; then echo 'Unreadable file'; (exit 2); fi"
答案2
shell 函數應該能夠獲得return
您喜歡的值:
checktype() {
if [ ! -f "$1" ] ; then
echo 'Irregular file'
return 1
fi
if [ ! -r "$1" ]; then
echo 'Unreadable file'
return 2
fi
return 0
}
$ checktype /dev/stdin ; echo $?
Irregular file
1
另外,test
對於別名或函數來說,這是一個糟糕的名稱,因為它是一個標準(內建)實用程式。
我意識到別名是一個糟糕的選擇,但目前教授要求使用別名。
好吧,這改變了一些事情。我的建議是向教授展示一種更合適的解決方案,並解釋為什麼簡單的解決方案不起作用。
但萬一這行不通,而你真的必須使用別名,請考慮傳回值實際上只是執行的最後一個命令的回傳值。你應該能夠組裝一些東西來返回你想要的值...
(如果是家庭作業,我認為立即給出完整的解決方案是不公平的。下面有劇透。)
提示:您已經使用了傳回任意值的命令。
答案3
alias
這裡是一個糟糕的選擇。將這些行放入 bash 腳本檔案中。
#!/bin/bash
if [ ! -f filename ];
then echo 'Irregular file'; exit 1 ;
fi;
if [ ! -r filename ];
then echo 'Unreadable file'; exit 2;
fi;
它將按預期工作。