“cd”在shell脚本中不起作用

时间:2011-02-07 05:13:20

标签: linux shell cd

我想知道为什么cd在shell脚本中不起作用。如下,

#!/bin/sh
cd test
mkdir $(date +%d-%mm-%Y)

当我运行这个时,我得不到cd来测试

cd: 2: can't cd to /test

为什么会这样?

10 个答案:

答案 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