【问题标题】:linux script running c program运行c程序的linux脚本
【发布时间】:2013-10-02 06:36:39
【问题描述】:

我试图在 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 之前添加回显,那么它会显示错误 enter command not found("enter" the first element in printf.

请帮帮我

【问题讨论】:

  • 您的问题非常不清楚。还不清楚为什么您在脚本中使用重音...将它们全部删除并用简单的“./odd222”(不带引号)替换最后一行,我认为事情会如您所愿。
  • 您的脚本中有一些小故障。首先你不应该让odd222 文件可执行。 gcc 应该自己处理。其次,不要回显您的奇数222 的输出。直接在脚本中尝试 ./odd222。

标签: c linux bash


【解决方案1】:

你不需要这样做

echo `./odd222`

如果你只是写

./odd222

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

输入echo 会在显示屏上返回一个空白行,然后在下一行显示命令提示符。这是因为按下 ENTER 键是系统开始新行的信号,因此 echo 重复此信号。

当你写作时

echo `./odd222`

它无法识别命令。因此它只在那里等待。echo 与我们的程序无关。

【讨论】:

  • 你的最后一段是错误的。 echo 与程序接收的输入无关。
  • 看我修改后的答案。我不是那个意思
  • 恐怕你加的句子更糊涂了。你回答的前半部分没问题。
【解决方案2】:

去掉反引号、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);

【讨论】:

    【解决方案3】:

    以下是一些改进:

    删除脚本中的倒引号,不需要它们。

    当您想将命令的返回值存储在变量中时使用这些。

    示例:

    var=`gcc odd.c -o odd222`
    echo $var # this prints the gcc command output
    

    同时运行你的可执行文件而不回显

    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,谢谢编辑,希望现在听起来更好更清晰。
    【解决方案4】:

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

    它也适用于任何语言。根据语言修改 编译器。

    第 1 步:

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

    例如:your_file_name.sh

    第 2 步:

    文件内容如下:

    gcc `pwd`/"$filename.c"
    
    ./"a.out"
    

    第 3 步:

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

    sudo chmod 777 filename.c
    

    第 4 步:

    在终端上执行文件。

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

    ./your_file_name.sh     filename.c
    

    示例截图:

    【讨论】:

    • Kotlin 编译器脚本 kotlinc pwd/"$1.kt" -include-runtime -d "$1.jar" java -jar "$1.jar"
    • 为什么不改为cccc 不可移植,但它是 GCC 或 Clang 的别名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2011-03-16
    • 2010-10-13
    相关资源
    最近更新 更多