結果

2012-12-23 42 views
2

如果我有一個包含以下腳本代碼基本sh文件:結果

#!/bin/sh 
rm -rf "MyFolder" 

如何使這個運行的腳本文件顯示結果給終端,它會指示目錄刪除成功了嗎?

回答

-1
rm -rf "My Folder" && echo "Done" || echo "Error!" 

你可以閱讀更多關於創建管道in bash manual序列

+2

'rm -rf'總是返回true –

+1

@sputnick除非失敗。 (例如,如果用戶沒有刪除目錄的權限。) –

+1

儘管說這是一系列管道在技術上是正確的,但它只是一系列簡單的命令。 (一個簡單的命令是一個不包含管道的普通管道。) –

-1

在慶典(和其他類似的貝殼)的?環境變量給你的最後執行的命令的退出代碼。所以,你可以這樣做:

#!/bin/sh 
rm -rf "My Folder" 
echo $? 

UPDATE

如果一旦rm命令已被執行的目錄不存在(因爲它已被成功刪除或因爲它不存在時,命令被執行)腳本將打印0.如果目錄存在(這將意味着該命令無法刪除它),那麼腳本將打印一個不是0的退出代碼。如果我理解正確的問題,這正是請求行爲。如果不是,請糾正我。

+0

史詩失敗,當目錄不存在時,rm不會退出> 0 –

+0

不會失敗,正如我的更新中所述。 – Vicent

+0

@ e-zero我更新了我的答案。我希望現在更清楚,對你有幫助。 – Vicent

-2

以前的答案是錯誤的:當方法不存在時,rm不會以錯誤代碼> 0退出。

相反,我建議使用:

dir='/path/to/dir' 
if [[ -d $dir ]]; then 
    rm -rf "$dir" 
fi 

如果你想rm返回一個狀態,刪除-f標誌。

在Linux Mint的(該目錄不存在)例:

$ rm -rf /tmp/sdfghjklm 
$ echo $? 
0 

$ rm -r /tmp/sdfghjklm 
$ echo $? 
1 
+0

答案是對的。您應該查看手冊頁中-f選項的含義。 – Vicent

+0

假。這是不可靠的。看我的編輯。 –

+0

-f選項忽略不存在的文件,從不提示。如果你直接用終端上的一個不存在的目錄執行它,你將不會有錯誤。那麼$?必須返回0。 – Vicent

0

如果你問的是一般情況下,你的問題的標題的建議,你可以用sh -x scriptname運行腳本,看看有什麼它在做。將診斷輸出寫入腳本本身也很常見,並使用選項進行控制。

#!/bin/sh 
verbose=false 
case $1 in -v | --verbose) 
    verbose=true 
    shift ;; 
esac 

say() { 
    $verbose || return 
    echo "$0: [email protected]" >&2 
} 

say "Removing $dir ..." 
rm -rf "$dir" || say "Failed." 

如果您運行此腳本不帶任何選項,它會悄悄運行,像一個乖巧的Unix應該實用工具。如果您使用-v選項運行它,它將打印一些診斷到標準錯誤。