我正在寻找持续时间较长的流程的解决方法。 有一个特殊参数$ _包含最后一个命令的最后一个参数。 好吧,我问你反之亦然。
例如:
/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
非常感谢任何帮助! 谢谢, 弗洛里安
答案 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