3

この .sh ファイルは、任意の c ソース ファイルをコンパイルするように作成したため、実行するとファイル名が要求され、gcc がそれをコンパイルしてから、実行可能ファイル a.out を実行します。

ただし、エラーが .c ファイルに存在する場合、これは正しく機能しません。また、a.out が存在しないことも示しています。このエラー メッセージ ( a.out is not present ) は必要ありませんが、.c ファイルに対して生成されたエラー メッセージのみを出力したいだけです。

これがスクリプトです..

echo `clear`
echo enter file name
read FILE
gcc $FILE
./a.out
echo -e '\n'
4

5 に答える 5

2

シェルスクリプトでエラー時の中止を有効にすると、作業がはるかに簡単になります。

#!/bin/sh
set -eu # makes your program exit on error or unbound variable
# ...your code here...
于 2013-03-01T12:36:11.720 に答える
2

組み込みのルールをスクリプトの代替として利用makeすることで、手作りのスクリプトの代替として使用できます。file.c生成された実行可能ファイルをコンパイルして実行するには、次のことを行う必要があります。

make file && ./file

よくわからない場合は、makeユーティリティを確認することを強くお勧めします。これにより、作業が大幅に楽になります。1 つ以上のファイル プロジェクトを管理することは、それがなければ非常に面倒です。

于 2013-03-01T12:49:53.343 に答える
1

ファイル名を二重引用符で保護することもできます。

#! /bin/bash
clear
echo -n "Enter file name: "
read FILE
gcc -Wall -W "$FILE" && ./a.out
echo
于 2013-03-01T12:41:15.870 に答える
1

コンパイル コマンドと実行コマンドを連鎖させることができます。

echo `clear`
echo enter file name
read FILE
gcc $FILE && ./a.out
echo -e '\n'

ここで、gcc が失敗すると、シェルは ./a.out コマンドをドロップします。

于 2013-03-01T12:35:06.190 に答える
0

これがあなたが探していたものであることを願っています。必要なのは次のコマンドだけです:

./compile executableName myCProgram.c -lm

より多くの C ファイルを互いの前に配置し、行末にライブラリを追加できます。executableName には .exe は必要ありません。

#!/bin/bash
args="$@"
quant=$#

#Copies in case you need the -lm(math library) params
biblio=${args#*-}
#grabs all params except the first one which should be the name of the executable
firstCommand=${*:2:${#args}}
#Remove the "-lm -lc" from firstCommand
firstCommand=${firstCommand%%-*}

printf "\nEXECUTING: gcc -W -Wall -c $firstCommand\n"

#Creates the object file ".o"
gcc -W -Wall -c $firstCommand

#Convert the files names from example.c to example.o
args=${args//.c/.o}
printf "\nEXECUTING: gcc -o $args\n\n"

#Creates the executable
gcc -o $args

printf "\n**Now execute comand: ./$1  **\n\n"
于 2016-04-11T20:33:56.137 に答える