通过管道输入 csh/tcsh 中的 if then

通过管道输入 csh/tcsh 中的 if then

我想要一个 csh 脚本来测试两个管道之间的变量。例如(传入类似于 json 文件,但没有换行符和缩进):

set debug = 1
cat test.inp | if ($debug) then (jq '.response' | tee test2.json) else python -m json.tool endif > test.output

这个想法是,无论变量 debug 的值是什么,输出都会保存在test.output.但我这样写会导致错误:

if:那么不合适。

有没有办法在 csh/tcsh 中执行此操作(就像 sh/bash 中似乎有的那样)?

答案1

在 C Shell 中通过管道传输到控制结构是一个错误。通过管道连接到控制结构的解决方法是创建脚本或 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

相关内容