1

UNIXでScriptbashを使い始めたばかりですが、たとえばlsで始まる履歴の最初のコマンドを作成するための解決策が見つかりませんでした。シェルに書くと

history  
!ls

動作しますが、スクリプトを作成しようとすると動作しません。

これは私のサンプルコードです

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

別の質問:なぜHISTFILEecho "HISTFILE is $HISTFILE"のみを印刷するのですか?ありがとう

4

3 に答える 3

1

シェル履歴ツールは対話型シェル!lsでのみ使用できるため、スクリプトに入れることはできません(*) 。

(*)シェルの-iオプションを指定してスクリプトを起動しない限り。ただし、テキストエディタを使用してスクリプトを記述している場合、コマンドを再利用する場合は、カットアンドペーストまたは関数を作成してください。

于 2012-04-13T18:05:00.160 に答える
0

履歴の最初のアイテムを取得するには、次の方法ではうまくいきませんか?

echo !1

2番目のコマンドは機能するはずです...HISTFILE変数が正しく定義されていない可能性があります。

スクリプトの最初の行で「bash」だけでなく「bash-li」を使用して、より多くの変数を初期化してください。

于 2012-04-13T17:25:15.643 に答える
0

HISTFILEには何も保存されていません。だからそれは空です。これを試して:

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

この行:

 HISTFILE=`history`

コマンドを実行し、出力をHISTFILEに保存します。

シェルの履歴ファイルは、スクリプトにパスが表示されていないホームディレクトリに保存されます。したがって、それを取得するには、次のようにします。cat ~/.bash_history

historyコマンドは、最後の1000コマンドのみを保存します。したがって、!1はエラーを出し、それはもう利用できないことを意味します。したがって、履歴と番号を示す最初の列を実行するだけです。これらのコマンドは、次を使用してのみ実行できます。!NUMBER

お気に入り:

$ !50
于 2012-04-13T17:38:05.933 に答える