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"

이것은 좀 더 분명할 수 있습니다.

세 번째 방법

세 번째 접근 방식은 스크립트를 서버에 배치하고 매개변수를 서버에 전달하는 것입니다.

관련 정보