【问题标题】:How to show line number when executing csh script?执行 csh 脚本时如何显示行号?
【发布时间】:2015-01-08 05:46:43
【问题描述】:

我正在使用 csh 脚本,我想在调试模式下执行 csh 脚本时查看行号。 我正在这样做

csh -x 脚本名称

除此之外我还需要做什么才能在调试模式下查看行号?

【问题讨论】:

  • Google 搜索“Csh 被认为有害”
  • @BasileStarynkevitch Google 用于“维护遗留代码”

标签: linux shell csh


【解决方案1】:

没有内置功能可以做到这一点。我能想到的唯一方法是(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 可以作为交互式外壳正常工作,但tcshcsh 通常不太适合脚本任务。有很多东西缺失、不完整,或者只是以“奇怪”的方式表现。它甚至比使用 POSIX 的普通 shell 脚本丑(这说明了很多)。

除非您有充分的理由不这样做(例如维护现有脚本),否则您现在可能应该放弃 csh,而使用“真正的”编程语言(Python、Ruby、Perl 等) ,或使用/bin/shbashzsh

【讨论】:

  • 是的,你是对的,它不能使用大型 csh 脚本。我坚持使用 csh 的原因是我现有的产品使用它。所以别无选择,只能承受这种痛苦。
  • @Dharmendra 好的,只是想澄清一下 :-) 我对你有感觉 ;-) 也许你可以破解它以使其工作(不确定问题是什么?)......
  • 在 tcsh 中,postcmd 在命令之前运行,而不是在命令之后(因为,原因???)不像 zsh,它在直觉上是正确的。而在 tcsh 中,precmd 在命令之后运行(但在下一个提示之前,这就是为什么我认为它以这种奇怪的方式命名)
  • 请不要推荐人们放弃 csh !!!许多公司要求将其用作外壳!
  • 这并没有改变它不适合脚本任务@user234461;即使作为交互式外壳,它也不是那么超级。
猜你喜欢
  • 2013-07-22
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多