Bash 如何导航到由一个文件的内容指定的目录?
我使用以下两个命令来更改目录。它似乎失败了,因为目录名包含空格Bash 如何导航到由一个文件的内容指定的目录?,bash,Bash,我使用以下两个命令来更改目录。它似乎失败了,因为目录名包含空格 $ cat temp.temp /cygdrive/C/training_course/Our\ Document $ cd `cat temp.temp` -bash: cd: /cygdrive/C/training_course/Our\: No such file or directory 然而,下面的一个是正确的。 那么,上述方法有什么问题?有什么好方法可以将目录更改为某个文件内容中指定的位置吗 $ cd /cygdr
$ cat temp.temp
/cygdrive/C/training_course/Our\ Document
$ cd `cat temp.temp`
-bash: cd: /cygdrive/C/training_course/Our\: No such file or directory
然而,下面的一个是正确的。
那么,上述方法有什么问题?有什么好方法可以将目录更改为某个文件内容中指定的位置吗
$ cd /cygdrive/C/training_course/Our\ Document
用Cygwin将不能cd
的行读入cat
命令。您可以尝试创建一个符号链接。cd“$(cat temp.temp)”
可能有效。@TimBiegeleisen:可能不是这样。$cd“cat temp.temp
”-bash:cd:/cygdrive/C/training\u course/Our\Document\:没有这样的文件或目录cd“$(cat temp.temp)”-bash:cd:/cygdrive/C/training\u course/Our\Document:没有这样的文件或目录$cd“/cygdrive/C/training\u-course/Our\Document”-bash:cd:/cygdrive/C/training\u-course/Our\Document:没有这样的文件或目录@JonathanLeffler。我认为上述三种方法失败的原因是因为“我们的文档”之间的空格已经被\转义了,所以双引号在这里不起作用。cd”一点也不奇怪”$(cat温度)"
不起作用;文件中的反斜杠造成了严重破坏。这就是为什么它是一个注释建议,而不是答案。如果文件中的名称是磁盘上的名称-没有反斜杠-那么它会起作用。我认为答案中的读取行
建议是你唯一的选择。我发现原来的反斜杠用于逃避s“我们的文档”之间的间隔也消失了,因此这也是内置命令“read”?$read line Yes的预期行为;read
(不同于read-r
)的工作方式(将反斜杠视为特殊)。请参阅的POSIX规范和上的Bash手册。@Zii:因此这也是预期的行为
?是。但是,如果将-r
参数与read ieread-r
一起使用,则会得到与之前相同的错误,因为-r
参数会阻止反斜杠转义被解释。
read line <temp.temp && cd "$line"
while read line
do
cd "$line"
//something here
cd ..
done <temp.temp