Linux

嘗試執行時如何處理 bash 錯誤?

  • August 11, 2016

想像一個具有標準 bash linux 腳本(在 SUSE linux 上執行)的腳本。像這樣:

#!/bin/bash
#version=1.0
#Some other text
command
#-------Comment

Changeversion=2.0
...
...

有什麼方法可以自動處理錯誤或至少說一條自定義消息?例如,我將嘗試執行腳本,但它說:

-bash: ./filename.sh: Keine Berechtigung

所以我必須為文件添加權限 - 有什麼方法可以在嘗試執行它時自動為該文件添加權限,或者至少添加“自定義消息”,如“do chmod +x filename.sh”?

或者,如果我有不同的編碼:

/bin/bash^M: bad interpreter:

腳本本身是否可以執行此命令:

sed -i -e 's/\r$//' filename.sh

或者至少在錯誤資訊中說出來?

我複制了你的問題:

# cat /tmp/tmp 
#!/bin/bash
echo SCRIPT BASH EXECUTED

# file /tmp/tmp
/tmp/tmp: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

# /tmp/tmp 
-bash: /tmp/tmp: /bin/bash^M: bad interpreter: No such file or directory

以下命令解決了執行該命令的 bash 會話的問題:

# trap 'file $BASH_COMMAND |grep -qs "Bourne-Again shell script, ASCII text executable, with CRLF line terminators" && sed -i -e "s/\r$//" $(echo $BASH_COMMAND|cut -d" " -f1) && echo "DOS FORMAT BASH SCRIPT, SED EXECUTED" && $BASH_COMMAND' ERR
# /tmp/tmp testArgument1 testArgument2
-bash: /tmp/tmp: /bin/bash^M: bad interpreter: No such file or directory
DOS FORMAT BASH SCRIPT, SED EXECUTED
SCRIPT BASH EXECUTED

# /tmp/tmp testArgument1 testArgument2
SCRIPT BASH EXECUTED

命令陷阱僅對您目前的會話有效,將其放在 /etc/profile /etc/profile.d 或一些類似的配置文件中,以使其對所有 bash 會話保持持久性。

我僅在 RHEL 7 系統上使用 bash-4.2.46-19.el7.x86_64 對其進行了測試

引用自:https://serverfault.com/questions/791991