我可以创建一个依赖于shell中先前执行的命令的退出代码的bash脚本吗?

时间:2016-05-05 07:35:09

标签: linux bash shell

我有一堆命令,只有在成功完成过去的命令后才能执行。我最初开始使用&&完成工作,但开始产生的是一些相当长的代码。

我决定尝试创建一个可以完成相同任务的脚本,但允许我一次一行。我称之为thenDo,这就是我所拥有的:

#!/bin/bash

errorCode=$?
if [[ $errorCode -eq 0 ]]; then
  $@
  errorCode=$?
fi
return $errorCode

我尝试使用一系列不同的修改来运行它,以查看$?在执行的各个阶段的价值。看起来此脚本始终以干净的平板开头,因为$?的起始值始终为0

现在,我已经在我的.bashrc中创建了一个函数,这似乎在我的shell中运行得很好,但我需要这个脚本,以便它可以在其他脚本中使用,这些脚本被调用其他脚本,似乎这个函数并不总是通过各种有时嵌套的脚本调用来持久。

如果我能找到一种方法在自己的脚本而不是函数中执行此操作,那将是非常好的。有没有办法让这种情况发生?

1 个答案:

答案 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 必须是该行的最后一个字符(后面没有空格)。