1

我是一名学生,这是我第一次接触 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 脚本挂起 ,但这并没有完全回答我的问题。

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

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

谢谢。

4

2 回答 2

5

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

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

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

于 2012-09-11T00:51:17.057 回答
1

正如 Jeremy 所描述的,这很可能是名称冲突。

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

这是对 Bash 的更彻底的解释

于 2012-09-12T09:17:24.790 回答