我有这样的 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
也更具描述性,并且由于它是一个脚本,因此您可以花费一些额外的击键来使代码更具可读性。