我想知道为什么
cd
在 shell 脚本中不起作用。如下,
#!/bin/sh
cd test
mkdir $(date +%d-%mm-%Y)
当我运行这个时,我得到can't cd to test
cd: 2: can't cd to /test
为什么会这样?
我也有同样的问题。 原来问题是 行结尾。
要修复它,请执行以下操作
tr -d "\r" < oldname.sh > newname.sh
来自 http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2
与这个问题不太相关。我有同样的错误消息,但是,我正在使用
cd ~/foo/bar
将其更改为
后cd $HOME/foo/bar
已修复。
我也遇到过这个问题,一度很困惑。
事实证明,我已经设置了
$CDPATH
环境变量,该变量通常允许常规 cd
命令照常工作。但是,我在非交互模式下运行我的脚本,如“sh”(不是“bash”),其行为略有不同。看起来像这样的命令:
cd subdir # works via interactive bash; not in script run via sh.
即使设置了 CDPATH
,也会在我的交互式登录 shell bash 中按预期工作。但是,当我在脚本中运行相同的命令(使用
sh
)时,它失败了
myscript.sh: line 9: cd: subdir: No such file or directory
我修改为相对路径:
cd ./subdir
而且它有效!我相信区别在于 shell 如何使用
CDPATH
。在一种情况下,它会搜索 CDPATH
和 当前目录,但在脚本中它仅 搜索 CDPATH
。这与 PATH
的行为类似。如果您将 .
(当前目录)保留在 PATH
之外,那么您必须键入 ./localbinary
而不是仅输入 localbinary
才能执行该文件。
这是我有根据的猜测。当我设置/取消设置
CDPATH
时,它会中断/取消中断 cd subdir
命令,并且 cd ./subdir
在所有情况下都适用于我。
将
pwd
作为第一行。 然后查看该目录是否有 test 子目录。
看起来像是从根目录运行
Benito Ciaro的回答很到位。我只是想添加另一种方法,您可以使用它来删除
\r\n
行结尾。在文本编辑器 Sublime 和菜单 中打开脚本
转到 查看 → 行结尾 → Unix
这将删除 ' ' 脚本中的字符。不要忘记保存您的文件。
这取决于脚本的执行位置,如果脚本位于您的 $PATH 中,那么它将基于您发出命令的当前目录(工作目录)。
如果这是作为 cron 作业运行的脚本,最好使用完整目录路径。
示例:
cd /home/用户/测试
如果脚本位于您的 $PATH 中,则提供完整路径也将起作用。
好吧,我使用“”让它工作
所以在你的情况下是:
cd "test"
/马库斯
2
是“没有这样的文件或目录”的错误号。您确定脚本test
存在于脚本的工作目录中吗?
您可能需要首先
cd
到 known“好”目录,然后 cd 进入该好目录的 known 子目录。
确保您位于正确的目录中
运行以下命令即可知道你在哪里
pwd
Shell 脚本在子 shell 内运行,每个子 shell 对当前目录都有自己的概念。
cd
成功了,但是一旦子 shell 退出,您就会回到交互式 shell,那里什么也没有改变。
试试这个
. myscript.sh
我在ubuntu中也遇到了同样的问题。我的命令外壳是:
$ export DIR=mydir
然后执行包含以下内容的脚本文件:
#!/bin/sh
cd ~/$DIR
给出输出:
cd: 2: can't cd to ~/mydir
尝试了很多方案,最后只能这样解决:
#!/bin/sh
WORKDIR=~/$DIR
cd "$WORKDIR"
我对此不太了解,但我更改了文件夹的权限,它对我有用
chmod -R 775 ubuntu
попробуйте создать .sh скрипт через редактор в консоли vim/nano