BASH:执行最后一个命令的特殊参数,而不是参数

时间:2014-09-29 14:01:51

标签: bash environment-variables

我正在寻找持续时间较长的流程的解决方法。 有一个特殊参数$ _包含最后一个命令的最后一个参数。 好吧,我问你反之亦然。

例如:

/etc/init.d/service stop; /etc/init.d/service start
如果有一个参数/变量包含最后一个被调用的二进制文件/脚本,那么

..会更容易。我们将其定义为$.,我们得到这个:

/etc/init.d/service stop; $. start

你有什么想法如何得到这个? 我找到了Thread on SO 但我只得到这样的输出: printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

但var $ BASH_COMMAND运作良好:

# echo $BASH_COMMAND
echo $BASH_COMMAND

# echo $BASH_VERSION
4.1.2(1)-release

非常感谢任何帮助! 谢谢, 弗洛里安

2 个答案:

答案 0 :(得分:1)

您可以使用以下命令重新执行最后一个命令:

!!

然而,这对你想做的事情没有帮助,所以你可以尝试使用"搜索并替换最后一个命令"快捷键:

^<text to search for>^<text to replace with>^

所以你的问题可以通过以下方式解决:

/etc/init.d/service stop; ^stop^start^

注意:这只会替换搜索文本的第一个实例。

另外,有关其他示例和有用的资料,请参阅下面的评论,更有经验的窥视。

答案 1 :(得分:0)

如果主要问题是第一个进程的持续时间,并且您知道下一个进程将是什么,您只需对第一个进程发出wait命令,然后用第二个进程跟随它。

后台程序示例:

./longprocess &
wait ${!}; ./nextprocess # ${!} simply pulls the PID of the last bg process

手动PID输入示例:

./longprocess
# determine PID of longprocess
wait [PID]; ./nextprocess 

或者,如果它始终是init脚本的开始|停止,可以制作如下的自定义脚本。

#/bin/bash
#wrapperscript.sh
BASESCRIPT=${1}
./$BASESCRIPT stop
./$BASESCRIPT start

由于命令包装在一个shellcript中,因此shell的默认行为是等待每个命令完成,然后再转到下一个命令。因此,执行看起来像:

./wrapperscript.sh /etc/init.d/service