2014-09-25 100 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