linux终端挂在bash脚本上

时间:2012-09-11 00:36:51

标签: c bash

我是学生,这是我第一次接触bash脚本,除了搞乱c的简单Makefile。

#!/usr/bin/sh
gcc -g -std=c99 -Wall -c field.c 
gcc -g -std=c99 -Wall -c testField.c 
gcc -g field.o testField.o -o testField 
#testField get 0xa 0 1 > PA1output.txt 
#testField get 0xaa 0 3 >> PA1output.txt

是我的脚本。我想将field.c和testField.c编译到可执行的testField中。 无论我是否留下最后两行注释掉,他们的linux终端都会挂起,10秒后没有任何事情发生,我按ctrl + c来停止它。最后我想将输出重定向到PA1output.txt,然后在文件末尾连接东西,但我想每次都重写文件内容。

据我所知,>重写指定文件的内容,>>连接到最后。

这不是我的功课,我想自动测试我的其他家庭作业。 'testField get 0xaa 0 3是我的c程序的参数。'

我试过Bash script hangs 但这完全没有回答我的问题。

我的脚本被称为'as',以便于输入。

为什么终端会挂起,如何让脚本执行我上面描述的操作?

感谢。

2 个答案:

答案 0 :(得分:5)

您的系统有另一个名为'as'的程序,它是一个汇编程序。您可能正在运行此而不是您的脚本,并且它会挂起,因为汇编程序正在等待终端的输入。

如果您坚持保留名称,则应使用完整或部分路径名(例如“./as”)运行脚本,以便运行正确的程序。

您可能会发现,如果没有第一行开头的“#”,您的脚本将无法运行。但是,运行脚本的另一种方法是从命令行“sh ./as”,这不依赖于#!线。

答案 1 :(得分:1)

正如杰瑞米所描述的那样,这很可能是名称冲突。

如果从命令行运行脚本(我真的希望你是这样),你不必害怕给你的脚本(以及所有文件名)更长,但更具体的名称。 Linux上的大多数(如果不是全部)命令行界面都有某种形式的制表符扩展。您所要做的就是键入足够的名称以使其唯一,然后按[Tab],shell应为您完成名称。

这是a more thorough explanation for Bash