如何获取在命令行执行的命令?

时间:2014-09-25 19:29:05

标签: linux bash command-line

如果我这样调用脚本:

myScript.sh -a something -b anotherSomething

在我的脚本中是否有办法获取调用脚本的命令?

在我尝试使用的第一行的脚本中:

lastCommand=!!
echo $lastCommand

但结果总是为空。

如果我echo !!打印到控制台的唯一内容是!!,但是如果我执行echo !!,则从命令行开始,我会打印最后一个命令。

我也试过了:

echo $BASH_COMMAND

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

2 个答案:

答案 0 :(得分:2)

调用脚本的完整命令是"$0" "$@",即命令本身后跟引用的所有参数。这可能是运行的确切命令,但如果脚本是幂等的,则可以运行它以获得相同的结果:

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

答案 1 :(得分: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