bash 脚本中的返回值错误

gs *_*rao 1 bash ubuntu shell-script exit-status

我有这样的 bash 脚本:

rm ~/sqoop/"$TABLE"/*
rmdir ~/sqoop/"$TABLE"
return $?
Run Code Online (Sandbox Code Playgroud)

执行此脚本后,它会向下一个进程返回一个值,但即使脚本成功运行并成功执行脚本中的所有阶段,它也会返回 1。

因为这 - 下一个过程没有发生。

如果我删除 return 语句,下一个过程会顺利进行。这个问题是在具有 Ubuntu 14 和新集群具有 Ubuntu 16 的 Hadoop 集群升级之后出现的。

如果删除这里的 return 命令,您能否帮助我们了解问题所在以及下一个进程如何成功运行,以及如果删除 Return 语句对生产有什么影响?

Kus*_*nda 6

return如果该语句不是从函数或点脚本(源脚本)执行的,则该语句将返回错误。

在 shell 函数和点脚本中,使用return. 在脚本中,使用exit.

一个简短的脚本,如

#!/bin/bash

return 0
Run Code Online (Sandbox Code Playgroud)

会产生错误信息

line 1: return: can only `return' from a function or sourced script
Run Code Online (Sandbox Code Playgroud)

它将设置$?为 1。

如果您不使用显式退出脚本exit(或者如果您使用exit但未指定退出代码退出),则整个脚本的返回代码将与上次执行的命令相同。

Haveexit "$?"与 plain 相同exit,如果它在脚本的末尾,则可以完全省略。


一般来说,我还建议您$HOME在脚本中使用而不是波浪号。这是因为它$HOME像任何其他变量一样工作,而波浪号在单独的扩展步骤中扩展,这意味着它不会作为变量运行,并且不会在带引号的字符串中扩展。 $HOME也更具描述性,并且由于它是一个脚本,因此您可以花费很少的额外按键来使代码更具可读性。