Linux C程序在从bash脚本将其输出重定向到另一个文件时卡在终端上
我试图在Linux中从一个bash文件运行一个C程序,然后将其输出写入另一个文件(位于另一个目录中)。我使用的命令是:Linux C程序在从bash脚本将其输出重定向到另一个文件时卡在终端上,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我试图在Linux中从一个bash文件运行一个C程序,然后将其输出写入另一个文件(位于另一个目录中)。我使用的命令是: gcc myfile.c -o test ./test > /home/"$user"/Documents/"$name"/"$file" 每当我尝试运行这个命令时,程序都不会运行,而是在加载时卡住了。即使我只写一个文件名(来自程序所在的同一目录),程序也不会运行,直到我删除整个重定向命令并只写简单的./t
gcc myfile.c -o test
./test > /home/"$user"/Documents/"$name"/"$file"
每当我尝试运行这个命令时,程序都不会运行,而是在加载时卡住了。即使我只写一个文件名(来自程序所在的同一目录),程序也不会运行,直到我删除整个重定向命令并只写简单的./test命令。我不知道为什么会这样
这是C程序:
#include <stdio.h>
int main()
{
int array[100], n, c, d, swap;
printf("Enter number of elements\n");
scanf("%d", &n);
printf("Enter %d integers\n", n);
for (c = 0; c < n; c++)
scanf("%d", &array[c]);
for (c = 0 ; c < n - 1; c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (array[d] > array[d+1])
{
swap = array[d];
array[d] = array[d+1];
array[d+1] = swap;
}
}
}
printf("Sorted list in ascending order:\n");
for (c = 0; c < n; c++)
printf("%d\n", array[c]);
return 0;
}
它没有打印任何内容。您可以使用命令tee来收集printw信息。like./test | tee文件
或者您尝试在其中添加2>&1。在Linux中使用
脚本命令解决了我的问题。此命令将C程序运行时提供的输入和输出存储并写入所需的文本文件。当C程序中有scanf
时,cat
和tee
命令不起作用。程序不运行,而是在加载时卡住了
如何检查?什么是“加载”状态?@KamilCuk等待输入而不是打印程序的内容,并且该输入不是程序的一部分。等待输入而不是打印程序的内容,并且该输入不是程序的一部分。你怎么知道?你不能“观察”等待。我怀疑您只看到您的终端中没有打印任何内容,然后在另一个终端中(使用ls
/cat
)您观察到输出文件是空的,对吗?/test
应该做什么?它应该打印什么(什么“程序内容”?)?你能发布myfile.c
的内容吗?请发一封电子邮件。stdbuf-oL./test
能解决这个问题吗?@KamilCuk我没有在任何地方声明文件是空的。我只是说,如果我删除重定向命令,该程序将完全正常运行,否则,它不会打印任何内容,也不会给出错误或任何内容,它根本不起作用。@alecxs Nothing。是否使用shell脚本?我猜你的剧本可能有错误。请在终端上试用,观察是否能正常运行。我在我的剧本上试了一下。它运行正常。如果可以,请回显路径/home/“$user”/Documents/“$name”/“$file”,该路径在终端上尝试过,但仍不起作用。我不知道为什么。如果您使用./test>test.txt,我会怎么想您的程序是否正在暂停代码扫描(“%d”、&n)并等待输入,所以它不会继续。是否有其他方法可以将输入的值和基于这些值给出的输出存储到文本文件中?
./test | tee text.txt