このスクリプトがあります。
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