SSH 원격 호출 명령 대체가 실패하는 이유는 무엇입니까?

SSH 원격 호출 명령 대체가 실패하는 이유는 무엇입니까?

이 스크립트가 있습니다.

exportFile(){
    file=$1
    skippedBytes=$2
    exportCommandString=$3

    #This works:
    #dd if=$file bs=1 skip=$skippedBytes | ssh sshConnection 'cat - >> /remote/dir/myTarget.txt.output' > export.output 2>&1

    #This does not work:
    dd if=$file bs=1 skip=$skippedBytes | $($exportCommandString $file) > export.output 2>&1

    cat export.output
}

sshExportCommand(){
    userAtServer=$1
    targetDir=$2
    filename=$3
    echo 'ssh '$userAtServer' '\''cat - >> '$targetDir'/'$filename'.output'\'
    #Same result with this:
    #echo "ssh $userAtServer 'cat - >> $targetDir/$filename.output'" 
}

exportFile mySource.txt 9 "sshExportCommand sshConnection /remote/dir myTarget.txt"

호출하면 다음과 같은 결과가 나타납니다.

85+0 records in
85+0 records out
85 bytes (85 B) copied, 0.00080048 s, 106 kB/s
Read bytes: 85
ovh_ssh: cat - >> /remote/dir/myTarget.txt.output: No such file or directory

무엇이 작동을 방해하나요? 이 명령 대체입니까? 제가 또 놓친 게 있나요?

답변1

주석 처리된 코드 줄에 작성한 대로 다음이 실행 중입니다.

byteCount=$( exec 3>&1 ; dd if=$file bs=1 skip=$skippedBytes | tee -a >(wc -c >&3) -a $file.output | ssh sshConnection 'cat - >> /remote/dir/myTarget.txt.output' > export.output 2>&1 ; 3>&1 )

따라서 이 지식을 적용하고 이 리팩토링을 사용하십시오.

exportFile(){
   file=$1
   skippedBytes=$2
   userAtServer=$3
   targetDir=$4
   targetFile=$5
   rm export.output

   byteCount=$( exec 3>&1 ; dd if=$file bs=1 skip=$skippedBytes | tee -a >(wc -c >&3) -a $file.output | ssh ${userAtServer} "cat - >>$targetDir/${targetFile}" > export.output 2>&1 ; 3>&1 )

   echo "Read bytes: $byteCount"
   cat export.output
 }
 exportFile mySource.txt 9 sshConnection /remote/dir myTarget.txt

관련 정보