我试图在我的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
出于某种原因,当脚本运行时,路径上发生了错误。有什么想法吗?
答案 0 :(得分:1)
file.txt
有Windows行结束字符;这些行以\r\n
(CR-LF)而非\n
终止。 Bash不会忽略行尾的\r
,这意味着它将成为传递给cd
命令的路径名的一部分。结果,该命令将失败。此外,\r
包含在错误消息中,这使得阅读更加困难。
在目录列表上运行dos2unix
(或等效文件)可以解决问题。