Cygwin 错误-无法运行‘/bin/bash’:没有此文件或目录

Cygwin 错误-无法运行‘/bin/bash’:没有此文件或目录

我刚刚在 Windows 7 上下载并安装了 Cygwin。它似乎已成功安装,C:\Cygwin64文件夹包含 1.2GB 的数据,而我从中安装它的安装文件夹刚好不到 300MB。但是,单击桌面快捷方式会打开mintty.exe,然后显示错误:

无法运行‘/bin/bash’:没有此文件或目录

尽管我安装了所有基本文件(这些文件bash应该是其中的一部分),但情况仍然如此 - 即使不是,安装程序后来也将其显示为必需包并自行安装。那么有人知道这里发生了什么吗?这可能是我最后一天第四次尝试成功安装 Cygwin;我开始认为我不应该拥有它。

答案1

我设法通过另一次安装解决了这个问题 - 这次我选择从网络下载并安装(安装程序中的选项 1),而不是单独下载文件并从本地存储的文件夹安装(选项 2 和 3)。我不确定为什么选择这些选项会导致安装不完整,但现在我可以bash无错误地运行。

答案2

我直接从网络进行默认全新安装后也遇到了同样的问题。

我通过转到“C:\cygwin64\bin”并复制“ash.exe”并将副本重命名为“bash.exe”来解决了这个问题。

(我纯粹是偶然尝试了这个,只是因为 bash 丢失了,我发现了这个不祥的 ash 文件)

答案3

问题

如果您愿意的话,您可以跳到下面查看这两个解决方案,特别是第二个解决方案,它对我有用。

我在恢复计算机的损坏部分后遇到了这个问题(目录System32损坏后 - 真糟糕!)这种事情以前也发生过(由于其他情况),当时我仍然有C:\cygwin64包含文件夹的目录,并且至少还有一些其他文件还在那里。

以前,我总是能够通过运行重新安装setup-x86_64.exe(我将我的放在 中C:\cygwin64)。之后,bash就会回来。我总是使用在线选项运行它https://mirrors.kernel.org,但即使我只bash在安装 GUI 中选择,我也会遇到这个问题,尽管我的错误出现如下

/bin/bash: Exit 126.
Failed to run '/bin/bash': No such file or directory

Cygwin 终端(模拟器)带有上面指定的文本,即“/bin/bash:退出 126。无法运行‘/bin/bash’:没有此文件或目录”

检查我的bin目录后发现确实bash缺少了。从命令提示符 ( CMD)

C:\Windows\System32>C:\cygwin64\Cygwin
'bash' is not recognized as an internal or external command,
operable program or batch file.

C:\Windows\System32>dir C:\cygwin64\bin\bas*
 Volume in drive C is ██████████
 Volume Serial Number is ██████████

 Directory of C:\cygwin64\bin

File Not Found

C:\cygwin64\bin>

请注意,我通常通过以下方式运行 Cygwin:

  1. 使用桌面快捷方式,这与从 (Windows) 命令提示符运行以下命令相同
C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico -

或者

  1. 使用该Cygwin.bat文件。我将首先展示文件内容,然后展示我尝试运行它的结果。
C:\Windows\System32>type C:\cygwin64\Cygwin.bat
@echo off

C:
chdir C:\cygwin64\bin

bash --login -i

C:\Windows\System32>C:\cygwin64\Cygwin
'bash' is not recognized as an internal or external command,
operable program or batch file.

C:\cygwin64\bin>

第一次(不成功的)解决方案

发现bash-<version>.tar.xz

我之前从 上下载过https://mirrors.kernel.org,所以我有一个文件夹,

C:\cygwin64\http%3a%2f%2fmirrors.kernel.org%2fsourceware%2fcygwin%2f

进一步探索后,我发现了一个bash-4.4.12-3.tar.xz叫做

C:\cygwin64\http%3a%2f%2fmirrors.kernel.org%2fsourceware%2fcygwin%2f\x86_64\release\bash

制定完整路径

C:\cygwin64\http%3a%2f%2fmirrors.kernel.org%2fsourceware%2fcygwin%2f\x86_64\release\bash\bash-4.4.12-3.tar.xz

我最后打开的是7zip,尽管你可以使用WinRAR或者其他类似的东西。

(我对如何在 Windows 上使用进行了一番抱怨tar,但使用它却无法进行提取。你可以看看我的抱怨这里如果你想了解更多关于tarWindows curl10 的信息)我将 tarball 复制/粘贴到桌面,然后右键单击并选择“扩展到”两次以查看其中的内容。我将所有这些都复制到

C:\Users\bballdave025\Desktop\bash-4.4.12-3\

这时我就能看看里面有什么了。然后,我将里面文件的位置与 Cygwin 所运行的机器上的文件位置进行了比较。我能够找到所有文件,然后我计划将它们简单地移动到适当的位置。

对于其他一些人来说,也许一些来自git bash(喜欢这张海报)(已存档) 或mingw/ msys2(如这张海报)(已存档),请注意,我的错误表明系统找不到/bin/bash- 与您的错误可能引用的不同/usr/bin/bash,因此会有一些差异。

C:\Users\bballdave025\Desktop\bash-4.4.12-3>tree /a /f .
Folder PATH listing for volume ██████████ OS
Volume serial number is ██████████ ██████████
C:\USERS\BBALLDAVE025\DESKTOP\BASH-4.4.12-3
|
+---etc               \   . On the working computer's version, I found
|   \---postinstall    }-' C:\cygwin64\etc\postinstall\bash.sh.done
|           bash.sh   /   I'm going to move the file from where you
|                       see it to _my_ C:\cygwin64\etc\postinstall.sh
|                     Then I'll run it, and if the tests pass, I'll
|                   rename it to bash.sh.done . I'll do that after
|                 moving all the others.
|
\---usr                 
    +---bin              
    |       bash.exe     \     
    |       bashbug       }---  I'll move these three files into 
    |       sh.exe       /      _my_  C:\cygwin64\bin   FIRST (1)
    |
    +---include
    |   \---bash                      \    . I'll move this bash
    |           <lots of *.h files>    }--' directory and all its
    |                                 /  constituent header (*.h)
    |                                  files to _my_ directory,
    |                                      C:\cygwin64\usr\include\
    |
    +---lib
    |       libbash.dll.a  }- I'll move this one file to _my_
    |                     /                         C:\cygwin64\lib\
    |
    |
    |                                          \
    \---share                                   \
        +---doc                                  :
        |   +---bash                              \
        |   |   +---<lots of bash doc stuff>       :
        |   |                                      |
        |   \---Cygwin                             : 
        |           bash.README                    |   .-I'll put the
        |                                      _.-'  _/ doc, info,
        +---info                              /   _-'  locale, and
        |       bash.info.gz                  \_/'  man directories
        |                                   --'   in _my_
        |                                  /  C:\cygdrive64\usr\share\
        +---locale                         `--------...____   directory,  
        |   +---<lots of locales which have the same  >    :  which is 
        |   |   <structure underneath; the last locale>   /  where they
        |   |   <(serving as an example) is below     >  :  were in the
        |   \---zh_TW                                   /   working
        |       \---LC_MESSAGES                        /    version.
        |               bash.mo                       /
        |                                            :
        \---man                                     /
            \---man1                               :
                    <lots of PROGRAM.gz files>    /
                                                 /                              

是的,我希望回来,但我想把其中的一些答案保留下来。

第二种解决方案

我的一个朋友就遇到过这种情况。一位管理员为她设置了帐户,但这位管理员在帐户中留下了“他的钩子”,这意味着他拥有某种所有权。由于这位管理员不再在我们原来的办公室工作,我们不得不想办法解决所有问题。

首先,我们尝试删除所有内容,但总有一些文件和文件夹我们无法删除 - 它们属于该管理员(顺便说一句,他是一个非常好的家伙。)我们甚至无法删除即使我们以管理员身份运行删除操作(File Manager -> C -> Windows -> explorer.exe右键单击,然后选择“以管理员身份运行”,转到目录C:\cygwin64并尝试删除...没有成功。)

为了最终让一切正常运转,我们必须以管理员身份进入,更改基本目录和所有其他目录的权限,然后删除目录C:\cygwin,重新创建目录,放入setup-86_64.execygwin64目录,然后运行安装程序。尝试更改整个目录的权限,然后bash使用setup-x86_64.exeGUI 重新安装,但是当我尝试这样做然后进入 Cygwin 终端时,我得到了类似这样的内容。

bballdave025@MY_MACHINE ~
$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
--2020-04-26 13:08:26--  https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.68.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.68.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13765 (13K) [text/plain]
apt-cyg: Permission denied

Cannot write to ‘apt-cyg’ (Permission denied).

bballdave025@MY_MACHINE ~
$ stat .
  File: .
  Size: 0               Blocks: 24         IO Block: ██████████  directory
Device: ██████████/██████████   Inode: ██████████  Links: 1
Access: (0575/dr-xrwxr-x)  Uid: (██████████/   bballdave025)   Gid: (██████████/Unknown+Group)
Access: 2020-03-25 06:44:06.256806800 █████
Modify: 2020-03-25 06:44:04.686424000 █████
Change: 2020-04-26 09:23:47.452255300 █████
 Birth: 2019-12-26 12:34:40.017177300 █████

bballdave025@MY_MACHINE ~
$ stat /
  File: /
  Size: 0               Blocks: 4          IO Block: ██████████  directory
Device: ██████████/██████████   Inode: ██████████  Links: 1
Access: (0775/drwxrwxr-x)  Uid: (██████████/   bballdave025)   Gid: (██████████/Unknown+Group)
Access: 2020-04-26 09:34:23.227577100 █████
Modify: 2020-04-26 09:34:23.227577100 █████
Change: 2020-04-26 12:55:46.658249200 █████
 Birth: 2019-06-25 06:49:31.485205900 █████

bballdave025@MY_MACHINE ~
$ chmod u+w .
chmod: changing permissions of '.': Permission denied

bballdave025@MY_MACHINE ~
$ # It's not going to be very useful like this.

顺便说一句,这也chmod -R u+w /导致了很多错误。Permission denied

如果您有文件需要恢复,那么现在您可能拥有第二好的机会去恢复它。

删除的一个方法是按照本 appuals 教程已归档)。您需要管理员权限才能CMD以管理员身份运行。

您也可以使用 Windows 资源管理器执行此操作,但您可能需要以管理员身份运行资源管理器。我也尝试过更改权限,但没有成功。

从类型菜单中,搜索cmd,然后以管理员身份运行。请参阅下面的屏幕截图。

以管理员身份运行 CMD 的步骤

取得所有权

takeown /r /d y /f C:\cygwin64

请注意,该命令的两个组成词是“TAKE OWN”而不是“TAKE DOWN”。还请注意,此命令可能需要很长时间,大约需要 5-20 分钟几乎完全安装已归档)。

接下来,我们授予每个人完全权限。

icacls C:\cygwin64 /t /grant Everyone:F

我们可以再次尝试返回并安装/重新安装bash,但我不喜欢刚才所做的事情带来的安全隐患。

bash如果您有文件需要恢复,那么现在可能是您恢复的第二个最佳机会。我的意思是,如果您此时使用GUI安装或重新安装setup-x86_64,或者即使您只是使用 Windows 文件资源管理器,这也是您最好的机会。

我宁愿删除这个 Cygwin 并重新安装。如果您尝试恢复任何文件,请继续运行以下命令。

rmdir /s /q C:\cygwin64

删除后,重新安装前,请确保使用

Windows+R然后regedit,然后移除/删除和Software\Cygwin文件夹中的所有内容。HKEY_LOCAL_MACHINEHKEY-CURRENT-USER

答案4

  1. 运行 Cygwin:安装-x86_64.exe

  2. 选择:下载无需安装

    这将下载 Cygwin 终端文件到您的目标文件夹中http://cygwin.mirror.constant.com/

    例子:C:\目标文件夹>http://cygwin.mirror.constant.com/>

  3. 跑步再次Cygwin:安装-x86_64.exe。现在,选择:安装本地目录, 点击 下一个, 点击下一个, 点击下一个, 然后结束

  4. 去:http://cygwin.mirror.constant.com/文件夹,有两个子文件夹:

    诺阿奇 x86_64

  5. 打开x86_64文件夹

  6. 打开发布文件夹

  7. 打开狂欢文件夹(里面有一个压缩文件,例如:**bash-4.4.12-

  8. tar.xz** 文件

    解压压缩的 bash 文件,出现两个文件夹(ETC用户)。

  9. 打开ETC文件夹并复制命令行工具文件并粘贴目录:\cygwin64\bin文件夹

相关内容