cd将无法在此路径上运行。有任何想法吗?

时间:2013-01-04 15:07:51

标签: linux bash shell sed cd

在我编写的脚本的一部分中,我将路径列表输出到临时文本文件中,以便稍后使用cd。我使用sed用'\'替换目录名中的空格,这样我也可以使脚本在目录名中使用空格。我的命令如下: cat temp.txt | sed 's/ /\\ /g' 这具有用'\'替换空格的所需输出,但是当我稍后尝试cd时它忽略第二个单词并且说示例\不存在。任何想法如何解决这个问题?

如果您想查看它,我的整个脚本都在这里:http://pastebin.com/6jmnKDAd

这是在我添加sed之前的备份

4 个答案:

答案 0 :(得分:3)

尝试将变量封闭在“”中,而不必转义空格。

cd "$mydir"

答案 1 :(得分:3)

为了补充Lorenzo的答案,如果你在文件中有一堆换行符分隔的路径名:

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

引用"$path"来阻止shell word splitting

是至关重要的

答案 2 :(得分:0)

您需要执行此操作而不是cat temp.txt | sed 's/ /\\ /g'

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

还要检查here

答案 3 :(得分:0)

是否需要使用临时文件,或者是否可以将目录存储在数组中:

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

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

资源