bashスクリプトのssh EOF - コマンド値を保存する方法は?

bashスクリプトのssh EOF - コマンド値を保存する方法は?

デフォルトでは、SSHセッションの複数のフォルダディレクトリに最後に作成されたフォルダをコピーするだけです。これを行うための正しいfindコマンドがありますが、結果をSSHセッションに保存できないようです。変数LATEST_FOLDERが空で、次のことを試しました。

cp -f arkOutput/$(find . -type d -exec stat --printf="%Y\t%n\n" {} \; | sort -n -r | head -1 | cut -f2 | cut -c 3-)/* /synology/data/${OUTPUT_PATH}/${i}/ark

完全なSSHセッションコードは次のとおりです。

    ssh [email protected] << EOF
      cd /data/dev/${ARK_PATH}/
      ./gradlew bootRun --no-daemon;
      LATEST_FOLDER=$(find . -type d -exec stat --printf="%Y\t%n\n" {} \; | sort -n -r | head -1 | cut -f2 | cut -c 3-);
      cp -f arkOutput/${LATEST_FOLDER}/* /synology/data/${OUTPUT_PATH}/${i}/ark
EOF

/data/devディレクトリは私がログインしているサーバーにのみ存在するため、事前にインポートして渡すことはできません。 ./gradlew bootRunコマンドは私が興味のあるフォルダを作成します。

答え1

現在の仕事の処理方法を修正してください

ssh [email protected] << EOF
   cd /data/dev/${ARK_PATH}/
   ./gradlew bootRun --no-daemon
   LATEST_FOLDER=\$(find . -type d -exec stat --printf="%Y\t%n\n" {} \; | sort -n -r | head -1 | cut -f2 | cut -c 3-)
   cp -f arkOutput/\${LATEST_FOLDER}/* /synology/data/${OUTPUT_PATH}/${i}/ark
EOF

あなたがそれをしたいのか、${i}それとも\${i}電子が欲しいのかわかりません。

2番目の方法

もう1つの方法は、2〜3個のSSHコマンドに分割することです。例えば

ssh "[email protected]" "cd /data/dev/${ARK_PATH}/ && ./gradlew bootRun --no-daemon"
LATEST_FOLDER=$(ssh "[email protected]" "find /data/dev/${ARK_PATH}/ -type d -exec stat --printf='%Y\t%n\n' {} + | sort -n -r | head -1 | cut -f2 | cut -c 3-" )
ssh "[email protected]" "cp -f /data/dev/${ARK_PATH}/arkOutput/${LATEST_FOLDER}/* /synology/data/${OUTPUT_PATH}/${i}/ark"

これはもう少し明らかです。

3番目の方法

3番目のアプローチは、スクリプトをサーバーに配置し、パラメータをサーバーに渡すことです。

関連情報