我正在使用csh脚本,我希望在调试模式下执行csh脚本时看到行号。 我喜欢
csh -x script_name
除此之外我还需要做什么来查看调试模式中的行号?
答案 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使用,但tcsh
或csh
通常不适合编写脚本任务。有很多东西缺失,不完整,或只是表现在一个奇怪的"办法。它甚至比使用POSIX的普通shell脚本更加更多丑陋(并且说了很多)。
除非你有充分的理由不这样做(例如维护现有的脚本),否则你现在可能应该放弃csh
,并选择"真实"编程语言(Python,Ruby,Perl,等等),或使用/bin/sh
,bash
或zsh
。