BASH シェルで以下のコマンドを実行しました。
export PROMPT_COMMAND='echo "$BASH_COMMAND" >> $HOME/my_bash_history'
しかし、シェルに何かを入力してリターンを押すたびに、my_bash_history ファイルに次の行が 1 行追加され、次の内容が記入されます。
echo "$BASH_COMMAND" >> $HOME/my_bash_history
echo "$BASH_COMMAND" >> $HOME/my_bash_history
echo "$BASH_COMMAND" >> $HOME/my_bash_history
echo "$BASH_COMMAND" >> $HOME/my_bash_history
echo "$BASH_COMMAND" >> $HOME/my_bash_history
echo "$BASH_COMMAND" >> $HOME/my_bash_history
なぜそうなるのか誰か知っていますか?
答え1
Rui が指摘したように、「内部のもの'は評価されません。」または、BASH マニュアルに記載されているように、
文字を一重引用符で囲むと、引用符内の各文字のリテラル値が保持されます。
答えを添える解決策として、PROMPT_COMMAND
以下のように履歴を記録するのも一つの方法です。
export PROMPT_COMMAND='echo $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//") >> $HOME/my_bash_history'