我正在嘗試製作一個 bash 腳本來使用一個命令立即構建和運行 C++ 程序,通常現在我必須這樣做
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
它卡在最後一行,然後什麼都不做。有人可以幫我從這裡出去嗎?
答案1
這應該夠了:
#!/bin/bash
CFILE=$1
OBJFILE="${CFILE%.*}"
g++ $CFILE -o $OBJFILE
echo "Built file: $CFILE -> $OBJFILE"
./$OBJFILE
你應該可以這樣稱呼它:
brun file.cc < input.in
這是有效的,因為重定向到腳本 STDIN 的輸入brun
只是被緩衝,然後緩衝的輸入可供首先讀取它的子進程使用 - 在這種情況下是新構建的可執行檔。
您也可以考慮使用make
自動化建置。 make
足夠智能,可以根據預設規則進行構建,而不需要顯式的 makefile。所以你的建置/運行腳本可以很簡單:
#!/bin/bash
OBJFILE="${1%.*}"
make "$OBJFILE" && ./$OBJFILE
這裡&&
確保 OBJFILE 僅在沒有發現建置錯誤時運行make
。