2016-03-19 3 views
0

私はしばしばMac OS、Linux、さらにはWindows上で1行のコマンドを使用して設定変更を行い、ファイルに簡単に記録したいので、マシンを再設定する必要がある場合は再生できます。特定のコマンドラインコマンドをファイルに簡単に記録する方法はありますか?

私はこれらのコマンドをいくつかのコマンドでのみ実行したいので、シェルの履歴は使用しないようにしてください。

理想的には、いくつかのコマンドを記録するシェル拡張機能を使用できます。

bashコマンドをスペースで開始した場合、このコマンドは履歴に記録されません。

逆のことをする別のプレフィックスを付けることができますか?これに使えるものがありますか? bashのソリューションは十分ではありません。既に存在するソリューションがあれば、新しいソリューションを作成するよりはるかに優れています。

+0

時々コマンドを実行してマシンをシェルスクリプトに入れたり、構成管理ツール。 – hek2mgl

+1

これらの「単一行コマンド」にはパイプと複合コマンドが関係していますか? – muru

+0

はい、その中には複合コマンドが含まれているものもあります。 – sorin

答えて

0

.bashrcの中の関数は接頭辞のように使用することができます。

log_this_command() { 
    echo "[email protected]" >> ~/a_log_file # log the command to file 
    "[email protected]"      # and run the command itself 
} 

警告:このログだけではなく、生の入力よりも、引数を拡大しました。

1

PROMPT_COMMANDにログインし、特定のコマンドをシェル履歴から抽出してファイルに書き込むことができます。以下のような

何か:これは問題を抱えている

log() { 
    last_command="$(history -p \!\!)" 
    if [[ $last_command == " "* ]] # save commands starting with *two* spaces 
    then 
     printf "%s\n" "$last_command" >> ~/special.log 
    fi 
} 
PROMPT_COMMAND="log; $PROMPT_COMMAND" 

  1. PROMPT_COMMANDは、プロンプトが印刷されるたびに実行されます。 を押すだけでを複数回入力すると、コマンドが複数回ログに記録される可能性があります。
  2. 2つのスペースでマーキングすると、またはignorebothHISTCONTROLから削除して、開始スペースのコマンドがまったくログに記録されないようにする必要があります。
  3. AFAICTは、次のコマンドが読み込まれると履歴が更新されるため、正しい履歴がPROMPT_COMMANDで利用可能なので、次のコマンドがプロンプトに戻った後にコマンドがログに記録されます。私たちの契約を保存する履歴が有効になっている場合preexec機能は自動的に最初の引数としてコマンドを取得します

    preexec() {  
        if [[ $1 == " "* ]] 
        then 
         printf "%s\n" "$1" >> ~/special.log 
        fi 
    } 
    

    、:


このすべてがpreexecフックで、zshの中に容易になるだろうトラブル。コマンドが読み込まれたときに実行されますが、実行が開始される前にタイミングが完璧です。 the documentationから:

コマンドを読み、 が実行されようとしているされた直後に実行さ

preexec

。ヒストリメカニズムがアクティブな場合( の行が履歴バッファから破棄されたかどうかにかかわらず)、ユーザーが入力した文字列が最初の引数として渡されます。それ以外の場合は空の 文字列です。実行される実際のコマンド(拡張された のエイリアスを含む)は2つの異なる形式で渡されます:2番目の引数は 機能体が省略されたコマンドの単一行のサイズ制限バージョン です。 3番目の引数には、実行中のフルテキスト が含まれています。

$ ls 
$ echo foo | echo bar 
bar 
$ cat ~/special.log  
    ls 
    echo foo | echo bar 
-1

をログに記録する追加、エントリが作成され、コマンドがuninterfered

として実行されるログ

これらの機能を作成する際に、それらのリストが好きな場合は自動化できます。すべて

関連する問題