web-dev-qa-db-ja.com

リモート環境変数でのpscpの使用

pscp.exeを使用してWindowsからLinuxにファイルを転送しています。このコマンドは正常に機能します。

pscp myfile.txt user@Host:/airflow/dags

ファイルの転送先となるLinuxホスト上の場所は、環境変数に格納されています。

$ echo $AIRFLOW_HOME
/airflow

pscpの呼び出しで、その環境変数を参照したいと思います。残念ながら、それは機能しません:

pscp myfile.txt user@Host:$AIRFLOW_HOME/dags

pscp: unable to open /dags: permission deniedを返します(もちろん、/dagsは存在しません)。

明らかに、コマンドの$AIRFLOW_DAGS部分がホストで解決されていません。それで、私のpscpコマンドでホスト上の環境変数を参照する方法はありますか?

3
jamiet

ユーティリティpscpはリモートシェル変数を解決できません。回避策として、最初にsshで変数の値を取得し(PuTTYコマンドplinkを使用)、それをWindows変数に格納します。

次のコマンドをバッチファイルに入れて実行します。

@echo off 
for /f %%i in ('plink -ssh user@Host echo $AIRFLOW_HOME') do set HOMEVAR=%%i
pscp myfile.txt user@Host:%HOMEVAR%/dags

注:コマンドライン(バッチファイルの外部)からfor /f...コマンドを使用するには、両方の%%i%iに置き換えます。

4
Steven