bash切换到变量和cd

时间:2012-11-05 11:37:55

标签: bash

嗨,我有一个非常奇怪的问题。 我试图以root身份运行以下脚本:

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

我做错了什么?

3 个答案:

答案 0 :(得分:3)

为什么要引用"$loc"

如果$loc有一个前导空格,那么引用变量扩展会将带有前导空格的目录作为参数传递。

e.g。以这种方式根源给我:

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

只需删除引用即可。 e.g。

cd $loc

答案 1 :(得分:2)

除了Brian的解决方案之外,如果您仍然需要在$loc中引用cd "$loc"因为路径可以包含任何空格,那么只需使用sed 's/^ *//g'修剪$loc中的任何前导空格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 | sed 's/^ *//g') 
cd "$loc"

答案 2 :(得分: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%% }"