我想知道为什么cd
在shell脚本中不起作用。如下,
#!/bin/sh
cd test
mkdir $(date +%d-%mm-%Y)
当我运行这个时,我得不到cd来测试
cd: 2: can't cd to /test
为什么会这样?
答案 0 :(得分:42)
我遇到了同样的问题。原来问题是\ r \ n行结尾。
要解决此问题,请执行
tr -d "\r" < oldname.sh > newname.sh
来自http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2
答案 1 :(得分:4)
与此问题不太相关。我有相同的错误消息,但是,我正在使用
cd ~/foo/bar
将此更改为
cd $HOME/foo/bar
它已修复。
答案 2 :(得分:3)
将pwd
作为第一行。然后查看该目录是否有一个test子目录。
它看起来像是从根目录
运行答案 3 :(得分:1)
嗯,我使用“”
工作了所以在你的情况下,它将是:
cd "test"
/马库斯
答案 4 :(得分:1)
Benito Ciaro的答案是正确的。我只想添加另一种方法来删除\r\n
行尾。在文本编辑器 Sublime 和菜单
转到查看→行尾→Unix
这将从脚本中删除'\ r'字符。不要忘记保存文件。
答案 5 :(得分:0)
你不应该使用
cd /test
代替?我不知道shell脚本,但我可以看到你的特定脚本对当前目录很敏感。
答案 6 :(得分:0)
这取决于脚本的执行位置,如果脚本在$ PATH中,那么它将基于您从(工作目录)发出命令的当前目录。
如果这是一个作为cron作业运行的脚本,最好使用完整的目录路径
例如:
cd / home / user / test
如果脚本位于$ PATH中,则提供完整路径也将有效。
答案 7 :(得分:0)
2
是“没有这样的文件或目录”的错误。您确定脚本test
存在于脚本的工作目录中吗?
您可能首先cd
到已知的“good”目录,然后cd进入该正常目录的已知子目录。
答案 8 :(得分:0)
我在ubuntu中遇到了同样的问题。我的命令外壳是:
$ export DIR=mydir
然后执行一个脚本文件,其中包含:
#!/bin/sh
cd ~/$DIR
给出输出:
cd: 2: can't cd to ~/mydir
通过尝试许多选项,最后只能像这样解决:
#!/bin/sh
WORKDIR=~/$DIR
cd "$WORKDIR"
答案 9 :(得分:-2)
确保您在正确的目录中
将命令bellow运行到已知的
位置pwd
Shell脚本在子shell中运行,每个子shell都有自己的当前目录概念。 cd
成功,但是一旦子shell退出,你就会回到交互式shell中,并且没有任何改变。
试试这个
. myscript.sh