1つのコマンドでC++プログラムを一度にビルドして実行するbashスクリプトを作成しようとしています。
g++ file.cc -o file
./file < input.in
できるようになりたい
brun file.cc < input.in
これどうやってするの?今私は次のように実行できるものを持っています
brun file.cc '< input.in'
これが私の現在のスクリプトです
#!/bin/bash
CFILE=$1
OBJFILE="${CFILE%.*}"
g++ $CFILE -o $OBJFILE
echo "Built file: $CFILE -> $OBJFILE"
chmod +x $OBJFILE
ARGS="${@##*.cc}"
./$OBJFILE""$ARGS
最後の行で行き詰まってしまい、何もしません。誰でもここで私を助けることができますか?
これで十分です:
#!/bin/bash
CFILE=$1
OBJFILE="${CFILE%.*}"
g++ $CFILE -o $OBJFILE
echo "Built file: $CFILE -> $OBJFILE"
./$OBJFILE
そして、次のように呼び出すことができるはずです。
brun file.cc < input.in
これは、brun
スクリプトのSTDINにリダイレクトされた入力が単にバッファリングされ、そのバッファリングされた入力が、最初に読み込むサブプロセス(この場合は新しく作成された実行可能ファイル).
make
を使用してビルドを自動化することも検討できます。 make
は、明示的なmakefileを必要とせずにデフォルトのルールからビルドを実行するのに十分スマートです。したがって、ビルド/実行スクリプトは次のように簡単になります。
#!/bin/bash
OBJFILE="${1%.*}"
make "$OBJFILE" && ./$OBJFILE
ここの&&
は、make
でビルドエラーが見つからなかった場合にのみOBJFILEが実行されるようにします。