簡體   English   中英

腳本重擊和歷史記錄Unix

[英]Script Bash and History Unix

我只是開始在UNIX上使用Script bash,但沒有找到在歷史記錄(例如以ls開頭)中編寫第一個命令的解決方案。 如果我在外殼中寫

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 謝謝

外殼程序歷史記錄工具僅在交互式外殼程序中可用,因此您不能(*)將!ls放入腳本中。

(*),除非您使用外殼程序的-i選項啟動腳本。 但是,如果要使用文本編輯器編寫腳本,則要重用命令,請剪切並粘貼或創建函數。

要獲得歷史上的第一項,以下的技巧不可行嗎?

echo !1

至於第二條命令,它應該可以工作... HISTFILE變量可能尚未正確定義。

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

您尚未將任何內容存儲到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

history命令僅存儲最后1000條命令。 所以!1給出一個錯誤,則表示它不再可用。 因此,只需執行歷史記錄和第一列即可獲得編號。 您只能使用!NUMBER執行這些命令

喜歡:

$ !50

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM