bash 脚本返回值错误

bash 脚本返回值错误

我有这样的 bash 脚本:

rm ~/sqoop/"$TABLE"/*
rmdir ~/sqoop/"$TABLE"
return $?

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

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

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

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

答案1

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

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

一个简短的脚本,例如

#!/bin/bash

return 0

将产生错误消息

line 1: return: can only `return' from a function or sourced script

并将其设置$?为 1。

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

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


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

相关内容