2012-04-13 55 views
1

我剛剛在UNIX上開始使用Script bash,但沒有找到解決方案來編寫歷史記錄中的第一個命令,例如,使用ls開始。如果我在shellScript Bash and History Unix

history 
!ls 

寫出來的作品,但是當我要創建一個腳本,它不會工作。

這是我的示例代碼

#!/bin/bash 
set -o | grep history 
set -o history 
#echo "HISTFILE is $HISTFILE" 
#history "!ls"; 
#history 
#!ls 
history #it works 

另一個問題:爲什麼echo "HISTFILE is $HISTFILE"只打印HISTFILE? 謝謝

+0

你如何調用你的腳本? – 2012-04-13 17:39:01

回答

1

shell的歷史記錄工具僅在interactive shell可用的,所以你不能(*)把!ls到腳本。

(*),除非您使用shell的-i選項啓動腳本。但是,如果您正在使用文本編輯器編寫腳本,則要剪切並粘貼或創建一個函數,以便重用命令。

0

要獲得歷史上的第一個項目,下面不會做詭計?

echo !1 

關於你的第二個命令,它應該工作...的HISTFILE變量可能沒有被正確定義。

嘗試在腳本的第一行中使用「bash -li」而不是「bash」,以獲取更多初始化變量。

+0

nope!1 does not work :( – user1107078 2012-04-13 17:29:25

0

您尚未將任何內容存儲到HISTFILE。所以它是空的。試試這個:

#!/bin/bash 
set -o history 
ls -l 
echo "hi" 
echo "hello" 
HISTFILE=`history` 
echo -ne "HISTFILE is: $HISTFILE" 

這條線:

HISTFILE=`history` 

將運行命令,並輸出存儲在HISTFILE。

shell的歷史文件存儲在主目錄中,其路徑在腳本中不可見。所以要檢索那個:cat ~/.bash_history

歷史命令只存儲最近的1000個命令。所以!1給出了一個錯誤,這意味着它不再可用。因此,只需執行歷史記錄和第一列就可以得到數字。您只能使用!NUMBER

像執行這些命令:

$ !50 
+0

嗨,謝謝你的回答。但我會收到最後一個以「ls」開頭的命令,所以我不應該使用!ls? – user1107078 2012-04-13 17:58:28

+0

通常不是HISTFILE作爲「系統」變量以指示保存歷史記錄的文件的存儲位置,即'HISTFILE =「$ HOME/.history」'。@ user1107078:您可以編輯您的問題以闡明您希望/需要在$ HISTFILE中獲得什麼樣的價值嗎? – shellter 2012-04-13 21:43:39

+0

HISTFILE是系統變量之一,你的ls只能在shell中工作,如上所述,你可以存儲在腳本中執行的命令的歷史記錄,並在以後從該變量中獲取它。 – 2012-04-13 22:21:32