我在我的專案中使用bash shell腳本。
主腳本呼叫了許多子腳本,但有時子腳本會出現錯誤。 我想讓腳本立即停止。
我發現了-errexit選項。它對我來說是有效的。
這里有一些限制。我不能編輯子腳本。 另外,我不想碰執行線。
下面是一個例子。
#!/bin/bash
# do something
exec bash test.sh
test.sh
#!/bin/bash
cat as.txt # error
cat ab.txt# run
我希望cat ab.txt不被運行。
我知道,exex bash -e test.sh會運行。
但真正的專案代碼是這樣的,觸摸exec行是危險的。
exec "$@"
我不能指望什么是$@。
如果我在'do something'中寫了set -e,它就不能應用于子行程(test.sh)。
我可以改變默認的選項腳本,比如~/.bashrc?
我怎樣才能在子行程中應用 shell 選項呢?
請幫助我!
uj5u.com熱心網友回復:
我用了一個類似的例子,在cat命令沒有成功后,帶有do something的腳本立即退出了。
doSome.sh
#!/bin/bash
exec bash test.sh
test.sh
#!/bin/bash
cat text.txt
touch newfile
輸出:
也許你不需要使用set -e?
編輯:
檔案被創建:
$ ll newfile
-rw-r-r-- 1 0000 0000 0 Sep 14 13:57 newfile
而當用cat操作取代touch newfile時,它確實一直在進行,而且問題一直存在。
一個可行的解決方案可能是在每行基礎上添加錯誤處理:
test.sh
#!/bin/bash
cat text.txt || exit 1
cat nofile.txt || exit 1
uj5u.com熱心網友回復:
這就是解決方案。
export SHELLOPTS
這個答案對我有幫助。
https://unix.stackexchange.com/questions/387186/are-all-the-shell-options-not-inherited-by-scripts
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/308018.html
標籤:

