リモートサーバーのシェルスクリプトを想像してみてください。
#!/bin/bash
rm /test.x
可能であれば、ローカルコンピュータでこのスクリプトを実行して/test.x
ローカルコンピュータのファイルを削除するにはどうすればよいですか?明らかに解決策は、認証などを使用しますが、リモートssh
サーバーからスクリプトファイルをダウンロードしないことです。
実際、私はローカルコンピュータで実行されるシェルコマンドのプロバイダとしてリモートスクリプトを使用したいと思います。
ベストアンサー1
何とかスクリプトの内容をダウンロードする必要があります。あなたはできます
ssh remote-host cat script.bash | bash
しかし、これは同じ問題を引き起こします。
cat script.bash | bash
つまり、スクリプトのstdinはスクリプト自体になります(スクリプトのコマンドがユーザーからいくつかの入力を受け取る必要がある場合は問題になる可能性があります)。
より良い選択肢(しかし、ksh、zsh、bashなどのプロセス交換をサポートするシェルが必要です)は次のとおりです。
bash <(ssh remote-host cat script.bash)
どちらの方法もスクリプトをダウンロードしてその内容を検索しますが、ローカルに保存することはありません。代わりに、コンテンツはパイプに供給され、パイプのもう一方の端でそれを読み、解釈しますbash
。
次のコマンドを使用して、現在のbashプロセスでリモートスクリプトの内容を実行することもできます。
eval "$(ssh remote-host cat script.bash)"
ただし、スクリプトを実行する前にスクリプトを完全にダウンロードしてメモリに保存します。
確実な解決策は次のとおりです。
. <(ssh remote-host cat script.bash)
しかし、いくつかのbashバージョンに問題があることに注意してください。