2014-09-25 127 views
1

如果我所说的脚本是这样的:如何获取在命令行执行的命令?

myScript.sh -a something -b anotherSomething

在我的剧本是有办法让那个叫脚本的命令?

在我的第一行脚本我试图使用方法:

lastCommand=!! 
echo $lastCommand 

但结果总是空。

如果我做echo !!打印到控制台的唯一东西是!!,但从命令行如果我做echo !!我得到最后一个命令打印。

我也试过:

echo $BASH_COMMAND

,但我得到空在这里。是否因为脚本是在子shell中调用的,因此子shell中没有先前的命令存储在内存中?

+0

@ jm666这个只返回被执行的命令,而不是命令和参数与他们的参数。 – 2014-09-25 19:54:38

回答

2

完整的命令,它调用的脚本将"$0" "[email protected]",即,本身随后引用了所有参数的命令。这可能是其运行的确切命令,但如果脚本幂等也可以运行,以获得相同的结果:

$ cat myScript.sh 
#!/usr/bin/env bash 
printf '%q ' "$0" "[email protected]" 
printf '\n' 
$ ./myScript.sh -a "foo bar" -b bar 
./myScript.sh -a foo\ bar -b bar 
0

这里是我的脚本myScript.sh

#!/bin/bash 
temp=`mktemp` 
ps --pid $BASHPID -f > $temp 
lastCommand=`tail -n 1 $temp | xargs | cut -d ' ' -f 8-` 
rm $temp 
echo $lastCommand 

#!/bin/sh 
last=`cat /proc/$$/cmdline | xargs -0` 
echo $last