"cd"在shell脚本中不起作用

Abh*_*hek 29 linux shell cd

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

#!/bin/sh
cd test
mkdir $(date +%d-%mm-%Y)
Run Code Online (Sandbox Code Playgroud)

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

cd: 2: can't cd to /test
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Ben*_*aro 46

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

要解决它,做

tr -d "\r" < oldname.sh > newname.sh
Run Code Online (Sandbox Code Playgroud)

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


Tyl*_*ler 5

我也遇到过这个问题,有一段时间很困惑。

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

cd subdir  # works via interactive bash; not in script run via sh.
Run Code Online (Sandbox Code Playgroud)

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

myscript.sh: line 9: cd: subdir: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我修改为相对路径:

cd ./subdir
Run Code Online (Sandbox Code Playgroud)

它有效!我相信区别在于 shell 的使用方式CDPATH。在一种情况下,它会搜索CDPATH 您的当前目录,但在脚本中它只搜索CDPATH. 这与 的行为类似PATH。如果您将.(当前目录)保留在 之外PATH,那么您必须键入./localbinary而不是仅仅localbinary执行该文件。

这是我有根据的猜测。当我设置/取消设置时,CDPATH它会中断/取消中断cd subdir命令,并且cd ./subdir在所有情况下都适用于我。


Mar*_*aux 5

与这个问题无关。我有相同的错误消息,但是,我正在使用

cd ~/foo/bar
Run Code Online (Sandbox Code Playgroud)

更改为

cd $HOME/foo/bar
Run Code Online (Sandbox Code Playgroud)

它是固定的。


Foo*_*Bah 4

作为pwd第一行。然后查看该目录是否有 test 子目录。

看起来像是从根目录运行的