簡體   English   中英

如何獲取shell腳本中最后一個Bash shell命令的成功狀態?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM