Cygwin - bash 脚本中的 cd

Cygwin - bash 脚本中的 cd

我刚刚开始使用 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。”

相同的脚本,但就我而言,没有错误消息。

这对我有用:

。我的脚本

相关内容