简单的 Bash 脚本

简单的 Bash 脚本

我正在尝试通过 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 触发模式。

相关内容