SSHを介して変数を含むローカルスクリプトファイルを実行することはできません。

SSHを介して変数を含むローカルスクリプトファイルを実行することはできません。

リモートシステムで実行するには、次のスクリプトtest.shファイルを実行する必要があります。

変数.txt:

name=stackexchange

テスト.sh:

#!/bin/bash
source ./variables.txt
echo $name

走る:

ssh -i "auth.key" user@host 'bash -s' < test.sh

ただし、次のエラーが発生します。

bash: line 2: ./variables.txt: No such file or directory

ベストアンサー1

そのシェル./variablesに存在しないファイルをインポートするように他のシステムのシェルに指示します。pwd段階的に見てみると、次のようになります。

  1. このコマンドはsshを介して接続し、ローカルで行を送信します。test.sh

    ssh -i "auth.key" user@host 'bash -s' < test.sh
    
  2. 接続を介してリモート シェルを起動し、ssh次の行を取得します。

    • #!/bin/bashこの行に対するリモートシェルの解釈は、シェルが何であるかによって異なります。ほとんどのシェルはこの行をコメントとして扱います。シェルがある場合、shリモートシェルはできません。bashなぜなら、shebang 行はスクリプトファイル内でのみ有効であり、スクリプトは実行可能なビットセットを必要とするからです。
    • source ./variables.txtこれで、リモートシェルはvariables.txt現在の作業ディレクトリのファイルからデータをインポートするように指示されます。ファイルが存在しない場合、シェルでエラーが発生します。あなたの場合、シェルはBashで、エラーは次のようになります。

      bash: line 2: ./variables.txt: No such file or directory
      
    • echo $name空のため、$name端末には空行のみが印刷されます。

variables.txtこれを直接確認するには、ソースとは異なる行を使用してリモートホームディレクトリにファイルを配置します。例:

name=remotehost

以前のようにテストスクリプトを実行します。

おすすめ記事