2012-04-15 46 views
0

在(ba)sh腳本中,如何忽略文件未找到的錯誤?如何讓bash忽略文件未找到

我寫一個腳本讀取從標準輸入(部分)文件名,使用:

read file; $FILEDIR/$file.sh 

我需要給腳本功能來拒絕不存在的文件名。

例如

$UTILDIR不包含script.sh 用戶類型的腳本
腳本試圖訪問$UTILDIR/script.sh

./run.sh: line 32: /utiltest/script.sh: No such file or directory 

如何讓我的劇本打印錯誤,但繼續腳本不打印「正常」失敗錯誤?

回答

1

您可以測試文件是否存在使用@ gogaman的答案代碼,但你可能更想知道文件是否存在和可執行。對於這一點,你應該使用-x測試,而不是-e

if [ -x "$FILEDIR/$file.sh" ]; then 
    echo file exists 
else 
    echo file does not exist or is not executable 
fi 
+0

非常有幫助。謝謝! – 2012-04-16 03:21:00

1
if [ -e $FILEDIR/$file.sh ]; then 
echo file exists; 
else 
echo file does not exist; 
fi 
1

在這裏我們可以定義只運行,如果該文件存在

run-if-present() { 
    echo $1 is really there 
} 

[ -e $thefile ] && run-if-present $thefile 
+0

這引入了競爭條件。 – Philipp 2012-04-15 01:02:56

+0

@菲利普如此如此? – 2012-04-16 03:21:27

+0

@ tikiking1:該文件可能會在測試和命令之間被刪除,所以有可能在'run-if-present'文件實際上不存在。 'run-if-present'仍然需要處理這種情況。 – Philipp 2012-04-16 18:50:34

0

根據您的腳本做一個shell程序,命令將失敗並顯示特定的退出代碼。如果您正在執行該腳本,退出代碼可能是126(權限被拒絕)或127(文件未找到)。

command 
if (($? == 126 || $? == 127)) 
then 
    echo 'Command not found or not executable' > /dev/stderr 
fi 
+0

這個我追加了(修改後的版本),它接收實用程序的回報。雖然不是我正在尋找的這是有幫助的。 – 2012-04-16 03:20:28