嗨,我有一个非常奇怪的问题。 我试图以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
我做错了什么?
答案 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%% }"