0

私が書いているスクリプトのセクションで、パスのリストを一時的なテキストファイルに出力して、後でcdで使用できるようにします。sedを使用してディレクトリ名のスペースを「\」に置き換えているので、スクリプトはディレクトリ名のスペースでも機能します。私のコマンドは次のとおりです。 cat temp.txt | sed 's/ /\\ /g' これはスペースを「\」に置き換えるという望ましい出力ですが、後でcdしようとすると、2番目の単語が無視され、example\が存在しないと表示されます。これを修正する方法はありますか?

あなたがそれを見たいのであれば、私のスクリプト全体はここのペーストビンにあります:http: //pastebin.com/6jmnKDAd

これは、sedを追加する前のバックアップからのものです

4

4 に答える 4

3

空白をエスケープせずに、変数を「」で囲んでみてください。

cd "$mydir"
于 2013-01-04T15:14:22.477 に答える
3

Lorenzoの答えを補足するために、ファイルに改行で区切られたパス名がたくさんある場合は、次のようにします。

while IFS= read -r path; do
    cd "$path"
    do stuff
done < temp.txt

"$path"シェルの単語分割を防ぐために引用することが重要です

于 2013-01-04T15:27:32.353 に答える
0

代わりにこれを行う必要がありますcat temp.txt | sed 's/ /\\ /g'

perl -F"/" -ane 'foreach (@F){if(/ /){$_="\"".$_."\"";}}print join "/",@F;' temp.txt

こちらもチェック

于 2013-01-04T15:36:05.847 に答える
0

一時ファイルを使用する必要がありますか、それともディレクトリを配列に格納できますか?

dirs=()
dirs+=("/tmp/file A.txt")
dirs+=("/tmp/file B.txt")

for d in "${dirs[@]}"; do
  cd "$d"
done

資力

于 2013-01-04T15:38:58.477 に答える