我刚刚开始使用 Cygwin,所以如果这是一个非常新手的问题,请原谅。
我有一个 bash 脚本,我使用 cd 命令进入一个目录,然后在该目录中执行某些操作。但是,cd 命令失败,提示“没有这样的文件或目录 /c/code/blah/blah”。
如果我将 cd 行直接复制到 shell 提示符中,那么它可以正常工作。它只是在脚本中失败。
[编辑] 根据要求,我添加了脚本中的实际行:
#!/bin/bash
cd /c/Code/Project
谢谢你的帮助,
丹。
答案1
您的脚本有哪种行尾?为了使 Cygwin bash 脚本正常工作(无需设置特殊选项),它必须具有 Unix 行尾 (LF) 而不是 DOS 行尾 (CR-LF)。如果您使用 DOS 行尾保存脚本,bash 会将您的参数视为cd
,/c/Code/Project^M
其中^M
是 CR,并且不会找到具有该名称的目录。
要查看其行尾类型,可以执行file scriptname
,其中脚本名称是脚本的名称。要转换脚本以使其具有 Unix 行尾,请执行d2u scriptname
。
不要使用记事本编辑 Cygwin bash 脚本。它总是以 DOS 行尾保存文件。
答案2
除非您覆盖,否则脚本会在其自己的 shell 副本(通常是 Bash)中执行。然后当脚本退出时,该 bash 实例也会退出。因此,您的脚本会 CD 到新目录,然后退出,返回到原始 Bash——它从未执行过 CD。
有两种方法可以解决这个问题。您可以使用别名而不是脚本,例如在 .profile 中有
alias mycd="cd /c/Code/Project"
另一种方法是使用“点”语法告诉 Bash 不要生成子 shell
. myscript
答案3
您可能会在 /cygdrive/c 中找到您的文件...
答案4
我没有声誉来评论或投票,但 CarlF 的回答对我有帮助。
“因此,您的脚本将 CD 放入一个新目录,然后退出,返回到原始的 Bash——它从未执行过 CD。”
相同的脚本,但就我而言,没有错误消息。
这对我有用:
。我的脚本