1

私は学生です。これは、c用の単純なMakefileをいじる以外に、bashスクリプトに初めて触れる機会です。

#!/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にコンパイルしたいと思います。最後の2行をコメントアウトしたままにするかどうかに関係なく、Linuxターミナルがハングし、何も起こらなかった10秒後に、ctrl+cを押して停止します。最終的には、出力をPA1output.txtにリダイレクトしてから、ファイルの最後に連結したいのですが、毎回ファイルの内容を書き直したいと思います。

私が理解している限り、>は指定されたファイルの内容を書き換え、>>は最後に連結します。

これは私の宿題ではありません。私が持っている他の宿題のテストを自動化したいのです。'testField get 0xaa03は私のcプログラムへの引数です。'

Bashスクリプトがハングするのを試しまし たが、それでは私の質問に完全には答えられませんでした。

私のスクリプトは、入力しやすいように「as」と呼ばれています。

ターミナルがハングするのはなぜですか。また、スクリプトで上記のことを実行するにはどうすればよいですか。

ありがとう。

4

2 に答える 2

5

システムには、アセンブラである「as」と呼ばれる別のプログラムがあります。スクリプトではなくこれを実行している可能性があり、アセンブラが端末からの入力を待機しているため、ハングします。

名前を保持することを主張する場合は、正しいプログラムが実行されるように、完全または部分的なパス名('./as'など)を使用してスクリプトを実行する必要があります。

最初の行の先頭に「#」がないと、スクリプトは実行されないことがわかるでしょう。ただし、スクリプトを実行する別の方法は、コマンドラインからの「sh./as」です。これは、#!ライン。

于 2012-09-11T00:51:17.057 に答える
1

ジェレミーが説明したように、それはおそらく名前の衝突です。

コマンドラインからスクリプトを実行している場合(本当にそうだといいのですが)、スクリプト(およびそのことに関するすべてのファイル名)に、より具体的な名前を付けることを恐れる必要はありません。Linuxのほとんどの(すべてではないにしても)コマンドラインインターフェイスには、何らかの形式のタブ拡張機能があります。あなたがしなければならないのはそれをユニークにするのに十分な名前をタイプし、そして[Tab]を押すことです、そしてシェルはあなたのために名前を完成させるはずです。

これがBashのより完全な説明です

于 2012-09-12T09:17:24.790 に答える