次のBashスクリプトがあります
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
set -H
case $- in (*H*) echo enabled ;; (*) echo disabled ;; esac
pwd
last_command="!!"
echo $last_command
印刷
disabled
enabled
/home/user
!!
コードの最初の行は、履歴拡張が有効になっていることを確認します。 2番目は歴史を拡張することです。 3回目も最初のものと同じです。次に実行され、pwd
最後のコマンドを割り当ててlast_command
変数を印刷します。
歴史は拡張されません。どうしたの?
答え1
非対話型シェルの場合は、特に次のことを行う必要があります。返品コマンド履歴を有効にする:
set -o history
set -o histexpand
それからあなたの例はうまくいきます。
disabled
enabled
/home/schaller/tmp/502442
last_command="pwd"
pwd