Bash
bash 腳本中的返回值錯誤
我有這樣的bash腳本:
rm ~/sqoop/"$TABLE"/* rmdir ~/sqoop/"$TABLE" return $?
執行此腳本後,它會向下一個程序返回一個值,但即使腳本成功執行並成功執行腳本中的所有階段,它也會返回 1。
因為這 - 下一個過程沒有發生。
如果我刪除 return 語句,下一個過程會順利進行。這個問題是在具有 Ubuntu 14 的 Hadoop 集群升級之後出現的,而新集群具有 Ubuntu 16。
如果在此處刪除 return 命令,您能否幫助我們了解問題以及下一個流程如何成功執行?如果刪除 Return 語句,對生產有何影響?
如果語句不是從函式或點腳本(源腳本)執行的,則該
return
語句返回錯誤。在 shell 函式和點腳本中,使用
return
. 在腳本中,使用exit
.一個簡短的腳本,如
#!/bin/bash return 0
將產生錯誤消息
line 1: return: can only `return' from a function or sourced script
它將設置
$?
為 1。如果您不使用顯式退出腳本
exit
(或者如果您退出exit
但未指定退出程式碼),則整個腳本的返回程式碼將與最後執行的命令相同。
exit "$?"
have與 plain 相同exit
,如果在腳本末尾,則可以完全省略。一般來說,我還建議您
$HOME
在腳本中使用而不是波浪號。這是因為$HOME
像任何其他變數一樣工作,而波浪號是在單獨的擴展步驟中擴展的,這意味著它不會像變數一樣執行,也不會在帶引號的字元串中擴展。$HOME
也更具描述性,並且由於它是一個腳本,因此您可以花費一些額外的按鍵來使程式碼更具可讀性。