1

こんにちは私は本当に奇妙な問題を抱えています。ルートとして次のスクリプトを実行しようとしています。

loc=$(transmission-remote 192.168.1.74:9091 --auth=user:password -t$TORRENTID -i |sed -e '1d;$d;s/^ *//'|grep Location: |cut -s -d : -f2) 
cd "$loc"

しかし、エラーメッセージを取得します:

cd: can't cd to  /leprechaun_tv-shows/download/

しかし、新しい文字列を作成すると機能します。

hello= /leprechaun_tv-shows/download/ 
cd $hello

私は何が間違っているのですか?

4

3 に答える 3

3

なぜ引用しているの"$loc"ですか?

先頭にスペースがある場合$loc、変数expansionを引用符で囲むと、その先頭のスペースを引数として持つディレクトリが渡されます。

たとえば、この方法でルートにcdingすると、次のようになります。

 $ cd " /"
 cd: no such file or directory:  /

引用符を削除するだけです。例えば

cd $loc
于 2012-11-05T11:40:20.170 に答える
2

ブライアンのソリューションの代わりに、パスにスペースが含まれている可能性があるため$locに引用符で囲む必要がある場合は、次のように を使用して先頭のスペースを削除します。cd "$loc"sed 's/^ *//g'$loc

loc=$(transmission-remote 192.168.1.74:9091 --auth=user:password -t$TORRENTID -i |sed -e '1d;$d;s/^ *//'|grep Location: |cut -s -d : -f2 | sed 's/^ *//g') 
cd "$loc"
于 2012-11-05T12:42:05.947 に答える
1

に最初の空白があるように見えるので$loc、bash のパラメータ展開でそれを削除できます。

loc=$(transmission-remote 192.168.1.74:9091 --auth=user:password -t$TORRENTID -i |sed -e '1d;$d;s/^ *//'|grep Location: |cut -s -d : -f2) 
cd "${loc%% }"
于 2012-11-05T13:14:19.983 に答える