!
コマンドで履歴コマンドをスクリプトファイルにエコーしてリダイレクトできますか?私は無視したpipe
、またはコマンドに変更がありますかredirect
?tee
518 xmodmap -e "keycode 66 = Return"
519 xmodmap -e "keycode 23 = Tab"
535 xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'
[Tech_Ministry@localhost ~]$ echo !535 && !518 >> xmodmap_-e.sh
echo xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape' && xmodmap -e "keycode 66 = Return" >> xmodmap_-e.sh
xmodmap -e clear Lock -e keycode 0x42 = Escape
この記事を読んだ後郵便はがき頑張ったecho !535:p && !518:p >> xmodmap_-e.sh
何か簡単なものが抜けたようですが…これは可能でしょうか?各コマンドを別々の行に表示できますか?
答え1
からhelp history
:
-p perform history expansion on each ARG and display the result
without storing it in the history list
たとえば、私が主にすることは、history -p \!572 >> myfile
履歴にコマンド572を保存することです。
あなたの例では、以下を使用します。
echo "$(history -p '!535') && $(history -p '!518')" >> xmodmap_-e.sh
history
単一のコマンドを使用してこれを行う方法があります。
(これにより、スクリプトファイルの1行に2つのコマンドが&&
演算子に関連付けられて配置されます。)
更新:この記事を書いて、私が探しているより簡単な形式は次のとおりです。
history -p \!535 \!518 >> whatever.sh
答え2
履歴マークを二重引用符で囲むと、拡張子を引用符付き文字列としてキャプチャできます。
echo "!535 && !518" >> xmodmap_-e.sh
公開された試みが失敗した理由は、参照されず、アクションが取られた&&
ためです。
echo !535 && !518 >> xmodmap_-e.sh
これは2つのコマンドに拡張されます。
echo {the expansion of !535}
&&
{run the expansion of !518} >> xmodmap_-e.sh
したがって、最初の拡張が作成されます。標準出力、対応するジョブがecho
成功したため、2番目のジョブが実行され、その後のすべての出力がファイルに追加されますxmodmap_-e.sh
。