最後に実行されたコマンドとオプションを取得し、ファイルに書き込む文字列として保存しようとしています。試してみましたが、fc
次のコマンドのみが提供されます(とにかく私にとっては)。また、入力時に正しいコマンドを提供しようとしましたが、!!:p
関数自体内で動作させることはできないようです。これを完了できますか?
これが起こったことです。arg
私が欲しい文字列です。
#!/bin/bash
foo(){
read HISTNUMVAR < histnum.txt
TEMPHNV=$(fc -l 0 | grep -o '^[0-9]*');
if [ $TEMPHNV -ne $HISTNUMVAR ]; then
arg=$(***last history command here***);
./write_arg_to_file.sh $arg;
fi
echo $TEMPHNV > histnum.txt;
}
このスクリプトは、正しいコマンド履歴を取得するだけでなく、必要なすべての操作を実行します。
答え1
よりきちんとした方法があるかもしれませんが、以下を使用して履歴から前のコマンドをインポートできます。
prev=$(fc -ln | tail -2 | head -1)
答え2
私はいくつかのことを処理できました。コマンドラインで次を使用します。
history 2 | sed 's/^ *[^ ]* *//' | cut -d$'\n' -f1
スクリプト内で使用されます。
arg=$(history 1 | sed 's/^ *[^ ]* *//')
これにより、コマンドとすべてのオプションが文字列として正常に保存されます。
答え3
非対話型の使用ではデフォルトで無効になっているため、スクリプトで履歴拡張を有効にする必要がある場合があります。set -H
これで問題が解決します。
テストされていませんが、これはうまくいくとarg="!!"
思います。