没有内置功能可以执行此操作。我能想到的唯一方法是(ab)使用postcmd特殊别名。该别名将在每个命令之后运行:
set _lineno = 0
alias postcmd '@ _lineno++ && echo -n $_lineno\ '
echo a
echo b
echo c && echo d
Run Code Online (Sandbox Code Playgroud)
输出:
% csh test.csh
1 2 a
3 b
4 c
d
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会使-x输出变得混乱:
% csh -x test.csh
set _lineno = 0
alias postcmd @ _lineno++ && echo -n $_lineno\
@ _lineno++
echo -n 1
1 @ _lineno++
echo -n 2
2 echo a
a
@ _lineno++
echo -n 3
3 echo b
b
@ _lineno++
echo -n 4
4 echo c
c
echo d
d
Run Code Online (Sandbox Code Playgroud)
我们可以用以下方法进行过滤grep:
% csh -x test.tcsh | & grep -Ev '^(@ _lineno|echo -n [[:digit:]]+)
set _lineno = 0
alias postcmd @ _lineno++ && echo -n $_lineno\
1 @ _lineno++
2 echo a
a
3 echo b
b
4 echo c
c
echo d
d
Run Code Online (Sandbox Code Playgroud)
所有这些都不够完美,甚至可能无法很好地处理大型脚本......
csh正如您在过去几天提出了许多相关问题:
虽然tcsh可以作为交互式 shell 正常工作,tcsh但csh通常不太适合脚本任务。有很多东西缺失、不完整,或者只是表现得“奇怪”。它甚至比使用 POSIX 的普通 shell 脚本还要丑陋(这已经说明了很多)。
csh除非您有充分的理由不这样做(例如维护现有脚本),否则您可能应该暂时放弃,并使用“真正的”编程语言(Python、Ruby、Perl 等),或者使用/bin/sh、bash、 或zsh。