1

実行する SCP コマンドを生成する bash スクリプトがあります。コードの関連部分は次のようになります。

echo $COPY_CMD
$COPY_CMD

私の出力は次のようになります。

rascher@localhost:~/Desktop/video_final$ ./xfervids.sh
scp "/media/My Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD" rascher@192.168.1.101:./video_working/
rascher@192.168.1.101 のパスワード:
"/media/My: そのようなファイルまたはディレクトリはありません
Book/PhotosVideos/Videos/18May2008Download/SD_VIDEO/PRG001/MOV056.MOD": そのようなファイルまたはディレクトリはありません

ただし、 output: の 2 行目をscp "/media/...コピーして端末に貼り付けると、機能します。

私は何を間違っていますか?「My Book」( ) のスペースをエスケープして、1 文字 ( ) ではなく"My\ Book"2文字を入れようとしましたが、これを一貫して動作させることができません。ヘルプ?\"My\\ Book"

4

2 に答える 2

5

パス名にスペースが含まれている場合は、非常に注意する必要があります。

コンテキストでは、おそらく次のものが必要です。

eval $COPY_CMD

今回は、変数を引用符で囲む必要はありません。

于 2009-12-29T03:39:51.993 に答える
4

コマンドを変数に入れることを避ける方法と理由に関するこの説明と、 のセキュリティへの影響に関するこの説明を読む必要があります。eval

このように変数を使用する理由の 1 つは、スクリプトによって実行されたアクションを記録または表示することです。あなたが発見したように、スペースなどを適切に引用またはエスケープできると問題が発生します。このタイプの出力を使用set -xset +xて、スクリプトのさまざまなポイントでオンとオフを切り替える方法があります。

于 2009-12-29T08:29:14.843 に答える