이 스크립트가 있습니다.
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