小编tes*_*est的帖子

有没有办法让我的 bash 脚本中的函数在任何命令错误时自动运行?

我正在编写一个需要执行一堆命令的 shell 脚本,并且每个命令都依赖于之前的每个命令。如果任何命令失败,整个脚本都应该失败,我会调用退出函数。我可以检查每个命令的退出代码,但我想知道是否有我可以启用的模式或让 bash 自动执行此操作的方法。

例如,执行以下命令:

cd foo || myfunc
rm a || myfunc
cd bar || myfunc
rm b || myfunc
Run Code Online (Sandbox Code Playgroud)


有没有一种方法可以让我在执行这些命令之前以某种方式向 shell 发出信号,如果其中任何一个失败,它应该调用 myfunc,这样我就可以写一些更简洁的东西,例如:

cd foo
rm a
cd bar
rm b
Run Code Online (Sandbox Code Playgroud)

shell bash shell-script error-handling

14
推荐指数
1
解决办法
5509
查看次数

IFS null 与未设置 IFS 不一样?

我在这里读了一个很棒的问题,叫做“理解 IFS”。我很惊讶,因为答案和评论引用了 POSIX,它指出 IFS= 与取消 IFS 不同。如果您取消设置 IFS,显然会使用默认值。如果您将 IFS 设为 null,则没有拆分器。我知道我看到了不同的看法,我在我的书签中找到了这个:

Bourne Shell 编程

$IFS

脚本中的第一条语句应该是

IFS=

它将输入字段分隔符重置为其默认值。否则,您将从用户那里继承 $IFS,用户可能将它设置为一些奇怪的值,以使 sh 解析字符串的方式与您期望的方式不同,并导致奇怪的行为。

那么前一段时间是真的还是作者错了?

shell shell-script bourne-shell

13
推荐指数
1
解决办法
7774
查看次数

变量赋值后在同一行上运行命令是否可移植?

是否有任何标准涵盖在同一行上的变量赋值后运行命令的可移植性?

APPLE="cider" echo hi
Run Code Online (Sandbox Code Playgroud)

这样的东西有多便携?它会在哪里工作,在哪里不会?

另外:如果这有什么不同,我的 shell 脚本以 #!/bin/sh 开头。

shell posix

7
推荐指数
1
解决办法
1106
查看次数

如何处理 bash 脚本中的括号等特殊字符?

我正在尝试获取某些程序的输出并将它们分配给变量。我正在使用反引号来做到这一点,但如有必要,我可以切换到不同的方法。我注意到的是,我经常没有在变量中得到预期的输出。下面是一个简单的案例。我的实际例子更复杂。无论我在反引号中运行的程序的输出是什么,我都希望它在变量中。那可能吗?

test=`echo [asdf]`
Run Code Online (Sandbox Code Playgroud)

如果我echo $test只显示一个。

shell quoting

5
推荐指数
2
解决办法
2万
查看次数