1

嗨,我遇到了一个非常奇怪的问题。我正在尝试以 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

我究竟做错了什么?

4

3 回答 3

3

你为什么引用"$loc"

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

例如,以这种方式 cding to root 给了我:

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

只需删除引用。例如

cd $loc
于 2012-11-05T11:40:20.170 回答
2

作为 Brian 解决方案的替代方案,如果您仍然需要$loc引用 incd "$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 回答