Linux脚本运行C程序

7

我尝试在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之前不加echo,那么它会说错误:输入命令未找到(printf中的第一个元素“enter”)。
请帮助我。

2
你的问题非常不清楚。而且不清楚为什么你在脚本中使用重音符号...把它们全部删除,并将最后一行替换为简单的"./odd222"(不带引号),我认为事情会按照你的期望工作。 - mah
你的脚本中有一些小问题。首先,你不应该需要使 odd222 文件具有可执行权限。gcc 应该可以自动处理。其次,不要在脚本中使用echo命令输出 odd222 的结果。尝试直接在脚本中使用 ./odd222。 - dragosht
4个回答

11

不需要使用反引号、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);

2

如果要使用gcc shell脚本运行C语言程序,请参考以下内容:

同样适用于任何语言。根据语言和编译器进行修改。

步骤1:

创建任何带有.sh扩展名的文件(shell脚本)

例如:your_file_name.sh

步骤2:

文件内容如下:

gcc `pwd`/"$filename.c"

./"a.out"

第三步:

使用以下命令在终端中更改文件的读、写和执行权限:

sudo chmod 777 filename.c

步骤四:

在终端上执行文件。

您必须从源文件所在的目录运行程序,因为我使用了当前工作目录(如果您想选择任何特定目录)。

./your_file_name.sh     filename.c

示例截图:

示例截图


Kotlin编译器脚本 kotlinc pwd/"$1.kt" -include-runtime -d "$1.jar" java -jar "$1.jar" - AKASH GUDADHE
为什么不用 cc 呢?虽然 cc 是 GCC 或 Clang 的别名,但它并不具备可移植性。 - Sapphire_Brick

1
你不需要做什么。
echo `./odd222`

如果你只是写下

./odd222

Shell会根据文件需要执行的方式来尝试执行程序。只需进行这些更改,您的代码就可以正常工作。

在屏幕上放置echo会返回一个空行,然后是下一行的命令提示符。这是因为按下ENTER键是向系统发出启动新行的信号,因此echo会重复此信号。

当您编写

echo `./odd222`

它无法识别该命令。因此,它只会停留在那里。回显与我们的程序无关。

你的最后一段是错误的。echo与程序接收到的输入无关。 - John Kugelman
我不是那个意思。 - Arya
很抱歉,您添加的句子更加混乱了。您回答的前半部分还可以。 - John Kugelman

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;
}

@JohnKugelman,感谢您的编辑,希望现在听起来更好、更清晰了。 - user1502952

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接