标签: cygwin

MSYS2和Cygwin之间的差异

传统上,MSYS bash被认为不如Cygwin bash.前者是MinGW内部用于运行autoconf脚本的辅助工具.但现在有MinGW-w64和MSYS2.后者附带了像包管理器这样的甜蜜的pacman和像zsh这样的优雅shell,所以我想知道仿真层是否还有差距.

虽然MinGW*应用程序是Windows本机可执行文件,但MSYS2软件需要POSIX仿真层,就像Cygwin一样.至少对于一个随意的用户来说,很难发现两者之间的差异.

  • 两个仿真层(如果有)之间的功能差异是什么?
  • 哪种仿真更快(更有效)?

bash cygwin msys2

48
推荐指数
2
解决办法
2万
查看次数

如何cd进入名称中带空格的目录?

我尝试了很多东西.见下文:

尝试进入目录:/ cygdrive/c/Users/my dir/Documents

$ DOCS="/cygdrive/c/Users/my\ dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my\ dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my\: No such file or directory

$ cd /cygdrive/c/Users/my\ dir/Documents
(success)
Run Code Online (Sandbox Code Playgroud)

非常奇怪的行为.当我手动输入时,退格会执行其转义字符.但是当我使用变量DOCS的参数扩展时.
我尝试了其他变体,例如没有反斜杠.

$ DOCS=/cygdrive/c/Users/Rahman\ dir/Documents

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory
Run Code Online (Sandbox Code Playgroud)

要么

$ DOCS="/cygdrive/c/Users/my dir/Documents"

$ echo $DOCS
/cygdrive/c/Users/my dir/Documents

$ cd $DOCS
-bash: cd: /cygdrive/c/Users/my: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我知道这是可能的.看这里:

$ echo $HOME
/home/my dir
Run Code Online (Sandbox Code Playgroud)

[编辑]正如所指出的,cd $ HOME也不起作用.引号必须放在它周围.

有没有搞错:

$ …
Run Code Online (Sandbox Code Playgroud)

bash cygwin cd

47
推荐指数
4
解决办法
7万
查看次数

如何在Cygwin中执行文件?

如何a.exe使用Cygwin shell 执行?

我在Windows上的Eclipse中创建了一个C文件,然后使用Cygwin导航到该目录.我在C源文件上调用gcc并a.exe生成了.我想跑a.exe.

c gcc cygwin

46
推荐指数
3
解决办法
11万
查看次数

防止在bash历史记录中保存重复项

我正在尝试阻止bash将重复命令保存到我的历史记录中.这是我得到的:

shopt -s histappend
export HISTIGNORE='&:ls:cd ~:cd ..:[bf]g:exit:h:history'
export HISTCONTROL=erasedups
export PROMPT_COMMAND='history -a'
Run Code Online (Sandbox Code Playgroud)

这在我登录并且.bash_history在内存中时工作正常.例如:

$ history
    1 vi .bashrc
    2 vi .alias
    3 cd /cygdrive
    4 cd ~jplemme
    5 vi .bashrc
    6 vi .alias

$ vi .bashrc

$ history
    1 vi .alias
    2 cd /cygdrive
    3 cd ~jplemme
    4 vi .alias
    5 vi .bashrc

$ vi .alias

$ history
    1 cd /cygdrive
    2 cd ~jplemme
    3 vi .bashrc
    4 vi .alias

$ exit
Run Code Online (Sandbox Code Playgroud)

但是当我重新登录时,我的历史文件看起来像这样:

$ history …
Run Code Online (Sandbox Code Playgroud)

bash command-line history cygwin

45
推荐指数
3
解决办法
2万
查看次数

Cygwin的好选择? - Cygwin不支持原生支持Win32应用程序

更新2014年9月9日:TL; DR版本: 转到本文的底部,了解Cygwin如何调用非Cygwin程序.

在花了一些时间制作一些碰巧具有相当大规模的bash脚本之后,Cygwin的新版本已经破坏了它们.这些脚本调用本机Win32应用程序,这些应用程序不与Cygwin链接,Cygwin显然没有得到Cygwin的正式支持.

这让我感到惊讶,因为多年来我认为Cygwin可以在更复杂的环境中使用,该环境结合了原生的非Cygwin Win32应用程序和使用Cygwin兼容层的POSIX程序.但显然只支持POSIX兼容层,如果本机Win32非Cygwin应用程序工作,那么它被认为是一个愉快的巧合.

我从与Cygwin中针对.NET Framework编译的运行程序遇到的不兼容性中发现了这一点.这曾经很好,但几个月前被打破了.具体来说,通过管道传输到任何其他Win32程序的标准输入的.NET程序的标准输出通常会导致接收Win32程序获得过早的文件结束信号,因为几个月前Cygwin最近从字节管切换到消息管道 - 并且消息管道似乎与使用Visual C++或.NET Framework的任何接收应用程序不兼容.这是因为.NET向标准输出发出空写,只有在使用消息管道时才会将其传递给接收应用程序.接收应用程序成功读取零字节,因此认为它是文件结束.项目负责人似乎并不认为这是一个真正的问题,因为他们显然不支持从Cygwin中运行非Cygwin程序(惊喜!).

引用项目负责人Christopher Faylor从邮件列表中的多封电子邮件中引用:

你所看到的可能是因为Cygwin在几次修改之前被改为使用消息类型的管道.这不会改变.采用这种改变来解决Cygwin程序的问题,这显然是我们的首要任务.

无论有多少人使用Visual C++或.NET,他们都不是我们的目标受众.当事情适用于不想使用UNIX工具但不是我们主要关注点的人时,这很好.为那些想要使用非Cygwin东西的人修复问题并不是我认为非常重要的事情.

来自pipe.cc:请注意,管道的写入侧打开为PIPE_TYPE_MESSAGE.这似乎更接近于模仿Linux管道行为,并且pty处理肯定是必需的,因为fhandler_pty_master以块的形式写入管道,当指定CANON模式时由换行符终止.

以上评论在此处显示"和"关系.消息类型管道更接近模仿Linux(UNIX)管道行为,并且绝对是ptys所必需的.

我同意詹姆斯的说法,运行时可能是错误的但是我也同意cygwin应该能够处理这些情况.

您之间的完全协议不会产生太大影响.Cygwin源代码不会通过投票改变.

即使这个问题最终以某种方式得到解决 - 谁知道 - 他们可能在3个月内打破别的东西而不关心修复回归.他们可能会考虑一个补丁,但我需要花一些时间才能找到有用的东西.我认为我的时间更好地花在其他地方,因为很明显他们非常愿意破坏与原生Win32应用程序的兼容性,并且不想浪费更多时间让Win32应用程序工作.所以我猜Cygwin不应该被认为是混合Win32/Cygwin环境的稳定平台 - 我的替代方案是什么?我应该从哪里开始,以避免完全重写为bash以外的东西?我不使用超过基础Cygwin安装+一些基本的perl脚本.

更新: 在发布这个原始问题之后,他们最终pipe_byteCYGWIN环境变量中做了一个新标志:查看文档.如果设置了此标志,它将解决上面讨论的问题.调用非Cygwin Win32程序时,请务必确保pipe_byte已设置该标志.

但是,我发现了与.NET Framework 4.0和Cygwin不兼容的问题.以前版本的.NET Framework没有此问题.我在Cygwin邮件列表上首先提到了这个问题:

管道同步和Cygwin与.NET Framework 4.0之间的不兼容性

没有得到富有成果的回应,我进一步调查并发现Cygwin正在创建重叠管道,这会导致问题.请注意,尝试使用具有重叠管道的非重叠Win32 API调用是未定义的,并且大多数(所有?)Win32非Cygwin程序不使用重叠I/O及其标准文件句柄.我提交了一个补丁,它pipe_nooverlapCYGWIN环境变量中创建了一个标志,可以防止这种情况发生:

修补程序可选择禁用重叠管道

不幸的是,他们已经拒绝了补丁,所以你永远不会在主要的Cygwin DLL中看到这个:

Re:Patch可选择禁用重叠管道

拒绝补丁的原因:

  1. 暗示我打破了Cygwin中的信号实现; 我没有发现这种情况,因为信号仍然使用重叠管道.
  2. 他们不想添加环境变量标志,即使它显然是修复问题.
  3. 他们不想支持甚至可以选择具有非重叠管道的代码.

有了这样的推理和态度,我恐怕无法想办法改变贴片以满足他们的要求......他们似乎决定禁止使用不重叠的管道.我一直在使用补丁一段时间,并没有遇到任何问题.此外,我想不出pipe_nooverlap旗帜会破坏的任何情况(请参阅我的邮件列表中的后续电子邮件),但我将其留作旗帜以防万一有麻烦.

因此,如果要从Cygwin调用非Cygwin Win32或.NET Framework程序,则需要执行以下操作:

  1. 将我的补丁应用于您正在使用的Cygwin版本的源代码.不要指望这个补丁会在未来的Cygwin版本中出现.
  2. 在环境变量中设置pipe_bytepipe_nooverlap标志CYGWIN.

这工作......现在!!! 我发布这个以防万一其他人仍然想要使用Cygwin做某些事情.

windows bash cygwin

45
推荐指数
3
解决办法
7万
查看次数

在Windows上删除名为"NUL"的文件

我在Windows 7上运行了一个在Cygwin下编译的程序,并将"NUL"作为输出文件名传递.它实际上在当前目录中创建了一个名为"NUL"的文件,而不是抑制输出.(显然它预计"/ dev/null",即使在Windows上也是如此.)现在我坚持使用这个我无法删除的"NUL"文件!

我已经尝试过了:

  • Windows资源管理器 - 错误:"无效的MS-DOS功能"(是的,这是严重的说法!)
  • 使用"del NUL"命令提示符 - 错误:"文件名,目录名称或卷标语法不正确."
  • 删除整个目录 - 与删除文件相同的交易
  • remove() 在C程序中 - 也失败了

我怎样才能摆脱这些NUL文件(我现在有几个),没有安装完整的Cygwin环境并在Cygwin下编译C程序来完成它?

c windows null cygwin

45
推荐指数
3
解决办法
1万
查看次数

如何获取Cygwin主目录的Windows路径?

如何以Windows格式(例如C:\ cygwin\home\user)以编程方式确定当前Cygwin用户的主目录,以便我可以在Cygwin Bash之外读取它?

cygwin

45
推荐指数
1
解决办法
3万
查看次数

来自bash的cygwin clearscreen

我想在cygwin终端中从bash中清除屏幕.我试过了

cmd /c cls
echo -e "^V^L"
echo -e "\014"
Run Code Online (Sandbox Code Playgroud)

这些都不起作用 - 它们都提供"换行".按CTRL + L确实有效 - 但我想从Bash脚本调用它.

有任何想法吗?

bash cygwin

44
推荐指数
4
解决办法
5万
查看次数

Node.js不支持Cygwin

我正在尝试安装node.js. 我按照这个教程,我被困在中间.

当我./configure在我的cygwin终端上写道时,它说"不支持cygwin".请帮助我提前谢谢.

cygwin install node.js

43
推荐指数
3
解决办法
3万
查看次数

.ssh目录未被创建

要生成.ssh目录,我使用以下命令:

ssh-keygen
Run Code Online (Sandbox Code Playgroud)

取自本教程:http://ebiquity.umbc.edu/Tutorials/Hadoop/05%20-%20Setup%20SSHD.html

但是.ssh目录没有创建,因此当我使用时,cd ~/.ssh我收到此错误:

"no such file or directory"
Run Code Online (Sandbox Code Playgroud)

有缺失的一步吗?我应该在.ssh使用ssh-keygen命令时创建目录吗?

unix ssh cygwin

43
推荐指数
3
解决办法
13万
查看次数

标签 统计

cygwin ×10

bash ×5

c ×2

windows ×2

cd ×1

command-line ×1

gcc ×1

history ×1

install ×1

msys2 ×1

node.js ×1

null ×1

ssh ×1

unix ×1