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

我想知道为什么cd不能在shell脚本中工作。 如下所示,

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

当我运行这个,我得到不能光盘testing

 cd: 2: can't cd to /test 

为什么这样?

Solutions Collecting From Web of "“cd”在shell脚本中不起作用"

我有同样的问题。 原来问题是\ r \ n行尾。

要修复它,请执行

 tr -d "\r" < oldname.sh > newname.sh 

http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2

pwd作为第一行。 然后看看该目录是否有一个测试子目录。

它看起来像从根目录运行

我有这个问题,并且一时困惑。

事实证明,我已经设置了我的$CDPATH环境变量,这通常允许常规的cd命令像往常一样工作。 但是,我以非交互模式运行脚本,如“sh”(而不是“bash”),行为有些不同。 看起来像一个命令:

 cd subdir # works via interactive bash; not in script run via sh. 

将在我的交互式登录shell,bash中按预期工作,即使设置了CDPATH也是如此。 但是,当我在脚本中运行相同的命令(使用sh )时,它失败了

 myscript.sh: line 9: cd: subdir: No such file or directory 

我修改它是一个相对路径:

 cd ./subdir 

它的工作原理! 我相信区别在于shell如何使用CDPATH 。 在一种情况下,它会搜索CDPATH 当前目录,但在脚本中它只搜索CDPATH 。 这与PATH的行为类似。 如果你离开. (当前目录)从你的PATH ,那么你必须键入./localbinary而不是只是localbinary来执行该文件。

这是我的教育猜测。 当我设置/取消设置CDPATH ,会打破/ unbreaks cd subdir命令,并且cd ./subdir在所有情况下都可以用于我。

这个问题没有真正的相关性。 我有同样的错误信息,但是,我正在使用

 cd ~/foo/bar 

改成这个后

 cd $HOME/foo/bar 

它是固定的。

你不应该使用

 cd /test 

代替? 我不知道shell脚本,但我可以看到你的脚本对当前目录敏感。

这取决于脚本在哪里执行,如果脚本在你的$ PATH中,那么它将基于你从(工作目录)给出命令的当前目录。

如果这是一个以cron作业运行的脚本,最好使用完整的目录路径。
例:
cd / home / user / test

如果脚本位于$ PATH中,则完整路径也将工作。

2是“没有这样的文件或目录”的errno。 你确定脚本test存在于脚本的工作目录吗?

您可能首先要cd已知的 “好”目录,然后cd到该好目录的已知子目录中。

那么我得到了它的工作使用“”

所以你的情况是这样的:

 cd "test" 

/马库斯

确保你在正确的目录

运行下面的命令,知道你在哪里

 pwd 

Shell脚本在子shell中运行,并且每个子shell都有自己的当前目录的概念。 cd成功了,但是一旦子shell退出,你就回到了交互式shell中,并且没有任何改变。

尝试这个

 . myscript.sh