【发布时间】:2015-01-08 05:46:43
【问题描述】:
我正在使用 csh 脚本,我想在调试模式下执行 csh 脚本时查看行号。 我正在这样做
csh -x 脚本名称
除此之外我还需要做什么才能在调试模式下查看行号?
【问题讨论】:
-
Google 搜索“Csh 被认为有害”
-
@BasileStarynkevitch Google 用于“维护遗留代码”
我正在使用 csh 脚本,我想在调试模式下执行 csh 脚本时查看行号。 我正在这样做
csh -x 脚本名称
除此之外我还需要做什么才能在调试模式下查看行号?
【问题讨论】:
没有内置功能可以做到这一点。我能想到的唯一方法是(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 可以作为交互式外壳正常工作,但tcsh 或csh 通常不太适合脚本任务。有很多东西缺失、不完整,或者只是以“奇怪”的方式表现。它甚至比使用 POSIX 的普通 shell 脚本更丑(这说明了很多)。
除非您有充分的理由不这样做(例如维护现有脚本),否则您现在可能应该放弃 csh,而使用“真正的”编程语言(Python、Ruby、Perl 等) ,或使用/bin/sh、bash或zsh。
【讨论】: