我有一堆命令,只有在成功完成过去的命令后才能执行。我最初开始使用&&完成工作,但开始产生的是一些相当长的代码。
我决定尝试创建一个可以完成相同任务的脚本,但允许我一次一行。我称之为thenDo
,这就是我所拥有的:
#!/bin/bash
errorCode=$?
if [[ $errorCode -eq 0 ]]; then
$@
errorCode=$?
fi
return $errorCode
我尝试使用一系列不同的修改来运行它,以查看$?
在执行的各个阶段的价值。看起来此脚本始终以干净的平板开头,因为$?
的起始值始终为0
。
现在,我已经在我的.bashrc
中创建了一个函数,这似乎在我的shell中运行得很好,但我需要这个脚本,以便它可以在其他脚本中使用,这些脚本被调用其他脚本,似乎这个函数并不总是通过各种有时嵌套的脚本调用来持久。
如果我能找到一种方法在自己的脚本而不是函数中执行此操作,那将是非常好的。有没有办法让这种情况发生?
答案 0 :(得分:1)
当您希望各种脚本共享功能时,请考虑使用一些实用程序脚本和wireshark
这些脚本创建目录。
也许您需要使用find dir of current script来查找相对于正在运行的脚本的util lib。
source
在您的情况下,我不会使用# example file sourcing files in your own dir, stored in the var `shlib`.
source "${shlib}"/thenDo
source "${shlib}"/sqlutils
解决方案,而是使用反斜杠在几行中编写命令:
thenDo
只记得action1 &&
action2 with a lot of arguments that \
may continue on the next line when \
you end each line with a backslash \
except at the end of your command &&
action3 &&
action4 |
pipe_also_does_not_need_backslash &&
action5
必须是该行的最后一个字符(后面没有空格)。