Bash

bash 腳本中的返回值錯誤

  • March 11, 2021

我有這樣的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也更具描述性,並且由於它是一個腳本,因此您可以花費一些額外的按鍵來使程式碼更具可讀性。

引用自:https://unix.stackexchange.com/questions/439414