我试图在linux中运行一个脚本来运行一个c程序 脚本如下
#!/bin/bash
`gcc odd.c -o odd222`
`chmod +x odd222`
echo `./odd222`
和odd.c是
main()
{
int i;
printf("enter the no.");
scanf("%d",&i);
printf("shiv");
}
但问题是,当我运行这个脚本时,所有的scanf语句都被执行,然后所有输出都显示出来......
如果我没有在./odd222
之前放置回声,则表示错误输入命令未找到(“输入”printf中的第一个元素。
请帮助我
答案 0 :(得分:6)
摆脱反引号,chmod和echo
。您需要做的只是运行gcc
,然后运行您的程序。
#!/bin/bash
gcc odd.c -o odd222
./odd222
如果成功编译,只尝试运行该程序也是一件好事。您可以使用&&
。
#!/bin/bash
gcc odd.c -o odd222 && ./odd222
修改C代码以确保立即打印出打印输出也是一件好事。输出通常是行缓冲的,这意味着只有在最后用换行符\n
写一个完整的行时才会显示它。你会想要打印换行符:
printf("enter the no.\n");
或明确刷新输出:
printf("enter the no.");
fflush(stdout);
答案 1 :(得分:0)
以下几项改进:
删除脚本中的反引号,不需要它们。
当您想要将命令的返回值存储在变量中时,可以使用它们。
示例:强>
var=`gcc odd.c -o odd222`
echo $var # this prints the gcc command output
同时运行没有echo的可执行文件
gcc odd.c -o odd222
chmod +x odd222
./odd222
您可以从脚本中删除chmod
行,因为您已将文件更改为可执行模式,并且每次都不需要它。
<强> odd.c 强>
#include <stdio.h>
int main()
{
int i;
printf("enter the no.");
scanf("%d",&i);
printf("shiv = %d", i);
return 0;
}
答案 2 :(得分:0)
有关使用gcc shell脚本运行C语言程序的信息,请参见以下内容:
它也适用于任何语言。根据语言进行修改, 编译器。
第1步:
创建任何扩展名为.sh的文件(shell脚本)
例如:您的文件名.sh
第2步:
文件内容如下:
gcc `pwd`/"$filename.c"
./"a.out"
第3步:
使用以下命令在终端中更改读取,写入和执行文件的权限:
sudo chmod 777 filename.c
第4步:
在终端上执行文件。
您必须从存在源文件的目录中运行该程序,因为我已经使用了当前的工作目录(如果要选择任何规格)。
./your_file_name.sh filename.c
示例屏幕截图:
答案 3 :(得分:-1)
你不需要做
echo `./odd222`
如果你只是写
./odd222
shell根据确定需要执行的文件的方式尝试执行程序。只需进行这些更改,您的代码就可以运行。
放置echo
会在显示屏上返回一个空行,然后在后续行中返回命令提示符。这是因为按下ENTER键是系统启动新线路的信号,因此回声重复该信号。
写作时
echo `./odd222`
它无法识别命令。它只在那里等待。我们的程序没有任何关系。