如何在执行csh脚本时显示行号?

时间:2015-01-08 05:46:44

标签: linux shell csh

我正在使用csh脚本,我希望在调试模式下执行csh脚本时看到行号。 我喜欢

  

csh -x script_name

除此之外我还需要做什么来查看调试模式中的行号?

1 个答案:

答案 0 :(得分:3)

没有内置功能可以执行此操作。我能想到的唯一方法是(ab)使用postcmd特殊别名。该别名将在每个命令后运行:

set _lineno = 0
alias postcmd '@ _lineno++ && echo -n $_lineno\ '

echo a
echo b
echo c && echo d

输出:

% csh test.csh
1 2 a
3 b
4 c
d

不幸的是,这会使-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

我们可以使用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

所有这些都不够完美,甚至可能无法很好地使用大型脚本......

在过去的几天里,您已经提出了许多csh相关问题:

虽然tcsh可以作为交互式shell使用,但tcshcsh通常不适合编写脚本任务。有很多东西缺失,不完整,或只是表现在一个奇怪的"办法。它甚至比使用POSIX的普通shell脚本更加更多丑陋(并且说了很多)。

除非你有充分的理由不这样做(例如维护现有的脚本),否则你现在可能应该放弃csh,并选择"真实"编程语言(Python,Ruby,Perl,等等),或使用/bin/shbashzsh