두 파이프 사이의 변수를 테스트하는 csh 스크립트가 필요합니다. 예를 들어 (json 파일과 같은 것을 전달하지만 개행이나 들여쓰기 없이):
set debug = 1
cat test.inp | if ($debug) then (jq '.response' | tee test2.json) else python -m json.tool endif > test.output
디버그 변수의 값이 무엇이든 출력은 에 저장된다는 아이디어입니다 test.output
. 그러나 다음과 같이 작성하면 오류가 발생합니다.
if: 그러면 부적절합니다.
csh/tcsh에서 이 작업을 수행할 수 있는 방법이 있습니까(sh/bash에 있는 것처럼 보임)?
답변1
C 셸에서 제어 구조로 파이프하는 것은 오류입니다. 제어 구조에 대한 배관 솔루션은 스크립트 또는 FIFO 파일을 생성하는 것입니다. 다음은 예제 파일입니다.
echo '\
# Functions\
alias function '\''( set argv = ( \\\!* ) ; source ~/.cshfuncs )'\' >> ~/.cshrc
echo 'switch ("$1")\
case 'myfunc':\
shift\
if ("$1") then\
( jq '.response' | tee test2.json )\
else\
python -m json.tool\
endif\
exit\
default:\
echo "Function $1 not set."\
exit\
endsw' > ~/.cshfuncs
이것은 FIFO의 예입니다.
mkfifo ~/fifo
echo 'if ("$?debug") then\
( jq '\''.response'\'' | tee test2.json )\
else\
python -m json.tool\
endif' > ~/fifo & cat test.inp | ( set debug ; source ~/fifo ) > test.output