2015-01-08 58 views
0

我正在使用csh腳本,我希望在調試模式下執行csh腳本時看到行號。 我做喜歡如何在執行csh腳本時顯示行號?

CSH -x SCRIPT_NAME

我有什麼從這個做拆開看在調試模式下的行號?

+0

Google對於「Csh認爲有害」 –

+0

@BasileStarynkevitch Google對於「維護遺留代碼」 – Carpetsmoker

回答

2

沒有內置功能來做到這一點。我能想到的唯一方法是(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

+0

是的,你是對的,它不適用於大型的csh腳本。我堅持使用csh的理由是我現有的產品。所以沒有選擇,只能承受這種痛苦。 – dcds

+0

@Dharmendra好吧,只是想明確:-)我感覺對你而言;-)也許你可以破解這個使它工作(不知道是什麼問題?)... – Carpetsmoker

+0

在tcsh,postcmd運行之前一個命令,而不是之後(因爲,原因???)不像zsh那裏它直觀地正確。而在tcsh中,precmd在命令之後運行(但在下一個提示符之前,這就是爲什麼我假定它被命名爲這種奇怪的方式) – DVK