Bash脚本从文件读取目录然后cd到它们失败

时间:2016-04-07 16:31:52

标签: macos bash shell

我试图在我的Mac上编写一个bash脚本来读取文件的内容,并使用它读取的每一行来组装一个路径,然后cd进入它并在那里执行一些命令。这是我试过的脚本:

#!/bin/bash
repo="$HOME/sp16-cs233"
cat file.txt | while read line
do
        cd $repo/$line
        #do some stuff here
done

该文件包含位于repo路径下的文件夹的名称。当我尝试运行它时,我收到以下错误:

wirelessprvnat-172-17-237-248:Honors adelejjeh$ ./script.sh 
: No such file or directorysers/adelejjeh/sp16-cs233/albers3
: No such file or directorysers/adelejjeh/sp16-cs233/jablum2
: No such file or directorysers/adelejjeh/sp16-cs233/iwchen2
: No such file or directorysers/adelejjeh/sp16-cs233/durg2
: No such file or directorysers/adelejjeh/sp16-cs233/hgao17
: No such file or directorysers/adelejjeh/sp16-cs233/agoel9
: No such file or directorysers/adelejjeh/sp16-cs233/eshoag2
: No such file or directorysers/adelejjeh/sp16-cs233/jinglim2
: No such file or directorysers/adelejjeh/sp16-cs233/gluo2
: No such file or directorysers/adelejjeh/sp16-cs233/ypark92
: No such file or directorysers/adelejjeh/sp16-cs233/hequ2
: No such file or directorysers/adelejjeh/sp16-cs233/dssheph2

出于某种原因,当脚本运行时,路径上发生了错误。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

file.txt有Windows行结束字符;这些行以\r\n(CR-LF)而非\n终止。 Bash不会忽略行尾的\r,这意味着它将成为传递给cd命令的路径名的一部分。结果,该命令将失败。此外,\r包含在错误消息中,这使得阅读更加困难。

在目录列表上运行dos2unix(或等效文件)可以解决问题。