【问题标题】:cygwin 4 bash -c pwd returning different values depending on current working dircygwin 4 bash -c pwd 根据当前工作目录返回不同的值
【发布时间】:2014-12-05 19:01:42
【问题描述】:

我从 cygwin 3 升级到 4。 现在我有以下我以前没有经历过的奇怪行为:

我在c:\Tools\cygwin 中安装了cygwin。 bash -c pwdc:\Tools\cygwin 启动时产生的输出与从任何其他目录启动时不同:

c:\Tools>cygwin\bin\bash -c pwd
/cygdrive/c/Tools

c:\Tools>cd cygwin

c:\Tools\cygwin>bin\bash -c pwd
/

这对我来说是个问题,因为直到现在我将所需的 cygwin 二进制文件捆绑在一个 bin 子目录中,以便在 Windows 上执行 shell 脚本。 那就是我有通过bin/bash -f myscript.sh调用shell脚本的批处理文件。

这些 shell 脚本会执行 cd .. 之类的操作,因为当前的工作目录是 /

一种解决方法是将 cygwin 移动一个子目录更深,但我想了解为什么 cygwin 会这样。

[编辑]:

它变得更好:

c:\Tools\cygwin>cd bin

c:\Tools\cygwin\bin>bash -c pwd
/usr/bin

lsc:\Tools\cygwin 开始时显示正确的内容:

c:\Tools\cygwin>bin\bash -c "/bin/ls -l | /bin/head -5"
total 313
-rw-r--r--  1 robert.panzer root          53342 Oct 10 13:24 Cygwin-Terminal.ico
-rwxr-xr-x  1 robert.panzer root             63 Oct 10 13:24 Cygwin.bat
-rw-r--r--  1 robert.panzer root         157097 Oct 10 13:24 Cygwin.ico
drwxr-xr-x+ 1 robert.panzer Domain Users      0 Oct 10 13:22 bin

【问题讨论】:

  • 好拼图!任何其他cygwin 用户可以复制此问题吗?还有@RobertPazer,/bin/ls -l 输出是否支持cd cygwin 真的把你带到/ ?祝你好运。
  • 和我的 cygwin 1.7.17 完全一样(除了我的路径:先是 S:\ 然后是 S:\cygwin)。
  • 我不敢相信这是新的,也不是错误,因为S:\>cygwin\bin\cygpath S:\ 给了我/cygdrive/sS:\>cygwin\bin\cygpath S:\cygwin 给了/。它与pwd 命令完全一致。只是执行cygwin的路径翻译。
  • 至少我在旧版本的 cygwin 中没有遇到过这种情况,它打包了 bash 3。所以……一定是改变了这种行为。行为是一致的,但我认为它不合逻辑。感觉就像一个 chroot 环境。
  • (我觉得这是合乎逻辑的,因为我从来没有见过 cygwin 与每个命令的(移植?)可执行文件不同的 chroot 环境。)

标签: windows bash shell cygwin


【解决方案1】:

我猜你是从 Cygwin 1.5.x 系列(使用 Bash 3.x)升级到 1.7.x 系列(使用 Bash 4.x)。

Cygwin 的行为并不令人惊讶。让我吃惊的是,它曾经做过不同的事情。

您的 Cygwin 使用您的 c:/Tools/cygwin 作为其 Unix 根目录 /。其中的所有内容都是 Unix 文件系统的一部分,因此省略了驱动器号。 c:/Tools/cygwin 之外的所有其他内容都可以在 /cygdrive/<driveletter> 挂载点下使用。

现在到/usr/bin 的东西。 Cygwin 的/bin 文件夹有点像/usr/bin 的硬链接。所有的可执行文件都在/usr/bin

【讨论】:

  • 是的,我弄错了版本号。我的意图是升级到不易受炮击影响的 bash。但事实是它工作了十年!之前和这次升级一样,行为发生了变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2014-12-30
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-03-29
相关资源
最近更新 更多