![通过编程让 bash 脚本可执行](https://linux22.com/image/861642/%E9%80%9A%E8%BF%87%E7%BC%96%E7%A8%8B%E8%AE%A9%20bash%20%E8%84%9A%E6%9C%AC%E5%8F%AF%E6%89%A7%E8%A1%8C.png)
我需要创建一个 bash 脚本来创建和安装驱动器。因此,两个简单的命令。在命令行中输入时,它们都“有效”。
每次普通用户登录时都会创建并执行该脚本,因此我需要一种方法来使该脚本在那时可执行。到目前为止,我无法让它工作。例如,第一部分mkdir /vvv/gggg
无法继续,因为脚本不可执行(我猜)。
希望这有意义。这可能吗?任何关于如何实现这一点的想法都将受到赞赏。
更新:
感谢您的回复。除了我是 Linux 新手之外,我可能还应该添加一些其他信息。
我正在使用一款名为 Ulteo 的开源虚拟桌面应用程序。这款应用程序在 Ubuntu 上运行,支持很少 - 这就是我来这里的原因。基本上,我是在边学边做。
因此,该应用程序具有登录脚本管理功能,我可以将脚本绑定到用户。使用 net use 的简单 Windows 脚本运行良好。但是,当我尝试应用 Linux bash 脚本时,什么也没有发生。
我认为,因为我需要chmod +x
先对脚本执行操作才能使脚本可执行,所以它失败了。顺便说一句,Ulteo 在 chroot jail 中运行。我创建了一个脚本,保存了它,但找不到该脚本。我在 chroot jail 内外都搜索过了。
我喜欢 dan08 的方法,让初始脚本引用另一个我可以找到并手动使其可执行的脚本。我会遇到同样的问题吗?
这些额外的信息能澄清情况吗?提前致谢。
附有照片。
![登录脚本管理控制台][1]
![有效的 Windows 脚本][2]
![不起作用的简单 Linux 脚本][3]
抱歉,我还不能发布图片
答案1
您需要做两件事:
在脚本开头引用脚本解释器:
#!/bin/bash
设置权限使其可执行:
chmod +x myscript.sh
答案2
您可以采用不同的方法并改变调用脚本的方式,而不是使脚本可执行。
script.sh
足以运行可执行脚本。
然而
如果您指定运行该脚本的程序,则有可能运行不可执行的脚本。
所以/bin/bash script.sh
或bash script.sh
或python script.py
都会运行不可执行的脚本。
因此,我的建议是编辑脚本的调用方式,并指定用于运行它的二进制文件。
答案3
用 C、C++ 或 Python 等创建一个程序,并使用系统命令执行 bash 脚本。
例如,C 程序如下所示:
#include "stdio.h"
int main(int argc, char const *argv[])
{
system('chmod +x path/yourbashscript.sh');
system('path/yourbashscript.sh');
return 0;
}
要在启动时执行该程序,请将其添加到启动程序列表中。从仪表板打开启动应用程序,然后单击添加按钮将编译的可执行文件添加到列表中。
答案4
沙门氏菌病是一个通用的 shell 脚本编译器。它接受在命令行中指定的脚本并生成 C 源代码。然后编译并链接生成的源代码以生成精简的二进制文件。
编译后的二进制文件仍将依赖于 shell 代码第一行中指定的 shell(shebang:#!/bin/sh
或类似的东西),因此 SHC 不会创建完全独立的二进制文件。
SHC 本身并不是编译器,例如cc
。而是对 shell 脚本进行编码和加密,并生成具有附加过期功能的 C 源代码。然后,它使用系统编译器编译一个行为与原始脚本完全相同的剥离二进制文件。执行时,编译后的二进制文件将使用 shell 的选项解密并执行代码-c
。