在 Chrome OS 中,Bash 不会执行我的脚本。如何让 Bash 运行我的脚本?

Ric*_*ket 16 bash chrome-os

foo.sh我的当前目录中有一个文件。如果我尝试运行./foo.sh,我会得到:

-bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied
Run Code Online (Sandbox Code Playgroud)

但是如果我运行,/bin/sh ./foo.sh那么它运行良好。

我该如何解决这个问题,以便我可以运行./foo.sh它并自动使用 /bin/sh 运行它?

编辑:好的,这是 Chrome 操作系统,此特定文件夹使用noexec. 显然,这阻碍了跑步的能力./foo.sh;但为什么?为什么我仍然可以运行sh foo.sh以实现完全相同的目标?那么,什么安全noexec呢?

bah*_*mat 22

noexec标志将适当地应用于脚本,因为那将是“预期的”行为。

但是,设置noexec只会阻止对自己在做什么不够了解的人。当您运行时,sh foo.sh您实际上是sh从其默认位置(可能/bin)运行,该位置不在安装有noexec.

您甚至可以noexec通过ld直接调用来绕过常规二进制文件。

cp /bin/bash $HOME
/lib/ld-2.7.so $HOME/bash
Run Code Online (Sandbox Code Playgroud)

这将运行 bash,无论它是否在安装有 .bashrc 的文件系统上noexec

  • +1 提及`ld.so`(聪明) (5认同)

Bru*_*ger 5

如果您尝试执行带有 MS-DOS 2 字节(回车换行)行结尾的文件,您也会收到此错误(或非常非常相似的消息)。

现在 Vim 非常聪明,它不一定会向您显示回车符为 '^M'。因此,如果您不检查 Vim 认为的“文件格式”是什么而仅依赖屏幕外观,您可能会被愚弄。

在这种情况下,“#!/bin/sh^M”会导致内核尝试找到“/bin/sh^M”,但它不能。确实是糟糕的翻译。