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 语句对生产有什么影响?
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
也更具描述性,并且由于它是一个脚本,因此您可以花费很少的额外按键来使代码更具可读性。