SSHを介して実行してローカルに出力をリダイレクトすると、一部のコマンドは機能しません。

SSHを介して実行してローカルに出力をリダイレクトすると、一部のコマンドは機能しません。

たとえば、次の2つのコマンドを実行してローカルに出力を取得できます。

ssh [email protected] ls > testhistory.txt  
ssh [email protected] "cat .bash_history" > testhistory.txt  

ただし、次のコマンドを実行すると、ローカル出力は常に空になります。

ssh [email protected] history > testhistory.txt

sshリモート宛先に到達した後にコマンドを実行すると、history予想される出力が得られます。

インライン実行時にhistory結果出力がないのにコマンドが正しく機能するのはなぜですか?ファイルを使用せずにコマンドを実行したかのように、コマンドが結果をローカルファイルに出力するようにするには、何を変更する必要がありますか?sshlshistorylscat.bash_history

ベストアンサー1

historyhistorybashの内部コマンドなので、実行可能ファイルを実行したくありませんbashlsこれは一般的に/bin/ls

これに加えて、bashはリモートコマンドを実行するときと同様に、デフォルトでは非対話型シェルで履歴を無効にします。

リモートシステムでシェルスクリプトを生成して、それを有効にして履歴を実行できます。たとえば、次のようになります。

#!/usr/bin/bash
HISTFILE=~/.bash_history
set -o history
history

または、SSH呼び出しを介してこれらすべての操作を実際に実行するには、次のようにします。

ssh [email protected] 'echo -e "HISTFILE=~/.bash_history\nset -o history\nhistory" | bash'

HISTTIMEFORMATリモートシステムで使用している場合は、その変数も考慮されませんので、それに合わせて計画を立ててください。

引用:Bashスクリプトの履歴コマンド

おすすめ記事