[英]How to get success status of last Bash shell command inside a shell script?
有時我經常連續調用兩個命令。 但是,第二條命令僅在第一條命令成功的情況下才有意義。
我想做這樣的事情:
#!/bin/bash
if [ $? -gt 0 ]
then
echo "WARNING: previous command entered at the shell prompt failed"
fi
但這不起作用:
t@quad:~$ echo "abc" | grep def
t@quad:~$ ./warnme.sh
Last command succeeded
我想要的是這樣的東西:
t@quad:~$ echo "abc" | grep def
t@quad:~$ echo ${PIPESTATUS[1]}
1
我們可以清楚地看到上一條命令失敗了。
我想要的結果是:
t@quad:~$ echo "abc" | grep def
t@quad:~$ ./warnme.sh
WARNING: previous command entered at the shell prompt failed
我找不到辦法。
command1 && command2
完全滿足您的要求:僅當command1成功時才執行命令2。 例如,您可以這樣做:
ls a.out && ./a.out
然后,僅當a.out可以列出時才執行。 我在http://www.linuxintro.org/wiki/%26%26上對此Wiki進行了博客發布。
怎么樣:
echo "abc" | grep def || ./warnme.sh
現在,warnme.sh只是警告而不進行測試。 僅在第一個命令失敗時才調用。
換句話說,它與以下內容相同:
echo "abc" | grep def || echo "WARNING: That didn't work..."
一種選擇是僅在前一個命令成功執行的情況下,將其放在要執行的命令列表之前:
set -e
如果腳本后面的任何命令返回非零值(通常是失敗的),則將退出腳本。 您可以使用以下方法再次將其關閉:
set +e
或者,如果您只想將其關閉一行,則可以使用true對命令進行邏輯或運算:
mycommand || true
對於我的許多腳本,我已在腳本頂部設置了-e作為安全功能,以防止腳本級聯和執行危險操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.