如何编写自动创建并运行可执行文件的Shell脚本?解决文件找不到错误
问题解答
可行性说明
完全可行,脚本可以实现生成可执行文件并自动运行的操作,你当前的报错是因为脚本里缺少「创建可执行文件」的步骤,直接去操作一个不存在的文件导致的。
报错原因拆解
你的test.sh脚本有两个核心问题:
- 脚本里直接给
fileName加执行权限并运行,但这个文件根本没被创建,自然会提示「No such file or directory」 - 报错里的空行提示(
: No such file or directory),大概率是脚本用了Windows的CRLF换行格式,而Linux/bash只识别LF格式,导致解析出错
修复后的示例脚本
下面给两个实用的实现例子,你可以根据需求选:
例子1:生成Shell脚本类可执行文件
#!/bin/bash # 先创建一个带执行逻辑的shell脚本文件 cat > fileName << 'EOF' #!/bin/bash echo "这是自动生成的可执行文件输出内容" EOF # 给文件添加执行权限 chmod +x fileName # 运行该可执行文件 ./fileName
例子2:生成并编译C程序为可执行文件(需系统安装gcc)
#!/bin/bash # 先创建C语言源码文件 cat > temp.c << 'EOF' #include <stdio.h> int main() { printf("这是C编译后的可执行文件输出\n"); return 0; } EOF # 编译源码生成可执行文件fileName gcc temp.c -o fileName # 给可执行文件加权限(编译后默认已有,这步可选) chmod +x fileName # 运行可执行文件 ./fileName # 可选:清理临时源码文件 rm temp.c
关于sudo -i的使用
如果需要以root权限运行生成的可执行文件,不用在脚本里硬写sudo -i,两种更简单的方式:
- 运行脚本时直接加sudo:
sudo bash test.sh - 在脚本的运行命令前加sudo:
sudo ./fileName
脚本格式修复(解决空行报错)
如果还有莫名的空行报错,把脚本转换成Linux兼容的LF换行格式:
- 安装了
dos2unix的话直接用:dos2unix test.sh - 没装的话用sed命令:
sed -i 's/\r$//' test.sh
内容的提问来源于stack exchange,提问作者buch
相关产品推荐
相关产品推荐

