我正在尝试通过 Cygwin 掌握 Bash 脚本。我的脚本非常简单。
我将目录更改为 C 盘的根目录,并打印新位置。
#!/usr/bin/bash
cd /cygdrive/c
pwd
chdir.sh
保存在我的主目录中的文件中。然后我./chdir.sh
从 bash 提示符中调用。这会导致错误
: No such file or directorygdrive/c
/cygdrive/c/Documents and Settings/rcotton
cd /cygdrive/c
我肯定有一个 C 盘,当我直接从 bash 提示符调用它时,该命令有效。
我意识到这个问题可能非常简单;请告诉我我做错了什么。
答案1
如果您使用不属于 Cygwin 环境的编辑器(例如“Notepad*”、“WordPad”等)编辑了脚本:请通过“dos2unix”工具将脚本转换为 Unix 行尾。
脚本本身完全正确,不需要任何 / 或 \ 更改。错误消息
: No such file or directorygdrive/c
这让我想到了行尾的问题,因为 \r\n(Windows 行尾)。如果您没有安装“dos2unix”,请执行以下操作:
tr -d \\r < win.txt > unix.txt
或者
sed -e 's/$/\r/' < unix.txt > win.txt
答案2
您确定在 cd 命令中使用了正斜杠而不是反斜杠吗?您的问题可能是由于混淆了这两个符号。
如果确实存在一个正斜杠并产生这个奇怪的错误,请尝试这些变体:
cd //cygdrive//c
或者
cd \\cygdrive\\c
答案3
尝试#!/usr/bin/bash.exe
看看是否有区别。两者都适用于我的 Cygwin 安装,但文件实际上名为 bash.exe。
答案4
致:ttanchala (和 Cotton 先生)
在 cygwin 中,//start1/path_2/stuff/long
触发 UNC hack 模式,该模式将其视为start1
具有共享的 SMB 服务器path_2
。这并不是我们所期望的。
这有时会在某些与 UNIX 共享的 shell 脚本中给您带来麻烦,在这些脚本中,多个正斜杠始终合并为一个斜杠。在 cygwin 中,多个正斜杠会合并,除非它是开头的斜杠,这是 UNC 触发模式。