하나의 명령으로 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
마지막 줄에서 멈추면 아무것도 하지 않습니다. 여기서 나를 도와줄 사람이 있나요?
답변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
명시적인 메이크파일 없이도 기본 규칙에 따라 빌드를 수행할 수 있을 만큼 똑똑합니다. 따라서 빌드/실행 스크립트는 다음과 같이 간단할 수 있습니다.
#!/bin/bash
OBJFILE="${1%.*}"
make "$OBJFILE" && ./$OBJFILE
여기서는 &&
에서 발견된 빌드 오류가 없는 경우에만 OBJFILE이 실행되도록 합니다 make
.