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 或 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"

这可能更明显一些。

第三条路

第三种方法可能是将脚本放在服务器上,然后将参数传递给它。

相关内容