cygwin bash选项卡完成,用于参数fork失败

时间:2018-06-21 17:45:45

标签: bash cygwin tab-completion

在Win 7安装中,在cygwin的bash下,制表符补全有一个奇怪的问题。在非常特殊的情况下,我会出现分叉失败(“权限被拒绝”)。

完成制表符对所有命令都适用。

Tab完成对内置的 arguments 以及/ usr / bin,/ usr / sbin等(包括.exe文件和shell脚本)中任何cygwin提供的程序都适用。 >

在个人〜/ bin目录中的命令中,制表符补全效果很好。

但是,每当我尝试对自己的shell脚本之一的 argument 进行制表符补全时,都会收到fork / permit否认错误。

我已经将我的shell脚本的文件权限和所有权与cygwin提供的shell脚本的文件权限和所有权进行了比较,它们是等效的。

我在/ cygwin / C层次结构之外创建了一个目录(命名为/ mybin),并将脚本复制到该目录中。然后直接调用脚本(例如/ mybin / gv n [TAB]),仍然会失败。

我已确保脚本具有模式775,并归我所有。我已经确定脚本所在的目录是模式775,并且也归我所有。

我没有在/ usr / share / bash-completion中创建任何东西(afaik,对于基于参数的文件名完成,我不必这样做)。但是我没有在/ usr / share / bash-completion中没有条目的cygwin脚本出现问题(例如/ bin / zegrep是一个shell脚本,但在/ usr / share / bash-completion下没有任何内容)

在这一点上,我很沮丧,但是由于制表符完成是一项至关重要的功能,因此我想解决这个问题。

这是一个例子...

% gv n[TAB] 0 [main] bash 9308 fork: child -1 -CreateProcessW
failed for 'C:\Users\binaryb\cygwin\bin\bash.exe', errno 13 bash:
fork: Permission denied

..在此示例中,我试图通过键入'n [TAB]'来完成文件名(在当前目录中)。我的当前目录中只有一个以“ n”开头的文件。

我正在Win 7(64位)下运行此程序,具有以下cygwin bash.exe版本...

% uname -a
CYGWIN_NT-6.1 binaryb 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin

% bash --version
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

1 个答案:

答案 0 :(得分:0)

我认为我找到了问题,但我不确定100%。它似乎发生在文件名只有1个或2个字符长的脚本中。如果我将脚本重命名为gvx,问题就消失了。

% gv n[TAB] 0 [main] bash 4556 fork: child -1 - CreateProcessW
failed for 'C:\Users\binaryb\cygwin\bin\bash.exe', 
errno 13 bash: fork: Permission denied

% mv ~/bin/gv ~/bin/gvx

% gvx n[TAB]
% gvx newfile.txt