用户工具

站点工具


faq:shell:tcsh_traps_and_pitfalls

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

faq:shell:tcsh_traps_and_pitfalls [2011/02/18 19:14] (当前版本)
loader csh/tcsh 陷阱与缺陷
行 1: 行 1:
 +===== csh/tcsh 陷阱与缺陷 =====
 +
 +==== 文件名包含有 glob-patterns ====
 +有关内容请查阅 tcsh man page 中的 Filename substitution 章节\\
 +
 +<​code>​
 +% ls *.c
 +15024.c
 +9543.c
 +9352.c
 +a[0].c
 +a[1].c
 +a[2].c
 +
 +% foreach x ( *.c )
 +foreach? echo $x
 +foreach? end
 +15024.c
 +9352.c
 +9543.c
 +echo: No match.
 +</​code>​
 +
 +当然可以使用 noglob 在运行 echo 命令的时候关掉 glob-patterns \\
 +不过最好还是使用 find + xargs 或者是脚本 perl (File::​Find),​ python (os.walk()) 来做类似的事情:​ \\
 +<​code>​
 +% foreach x ( *.c )
 +foreach? set noglob
 +foreach? echo $x
 +foreach? unset noglob
 +foreach? end
 +15024.c
 +9352.c
 +9543.c
 +a[0].c
 +a[1].c
 +a[2].c
 +</​code>​
 +
 +
 +==== 恶心的 one-line ====
 +有时候非常羡慕 Bourne 系的 shell 能简单的做到单行诸如 \\
 +for x in `ls`; do echo $x; done 之类动作, 而且能非常方便的使用历史命令重复执行。\\
 +tcsh 也可以用一个恶心的方式做到类似功能, 比如下面酱紫:\\
 +
 +<​code>​
 +% alias test_finger '(echo "​foreach user ( delphij davidxu ) " ; echo "echo == "​\$"​user == " ; echo "​finger -s "​\$"​user@freebsd.org";​ echo "​end"​ ) | tcsh -f'
 +% test_finger
 +== delphij ==
 +[freebsd.org]
 +Trying 69.147.83.40...
 +... ...
 +</​code>​
 +
 +==== 网上流传很久的一个古代 tcsh 黑写的经典檄文 ====
 +[[http://​www.faqs.org/​faqs/​unix-faq/​shell/​csh-whynot/​|Csh Programming Considered Harmful]]
  
/data/vhosts/wiki-data/pages/faq/shell/tcsh_traps_and_pitfalls.txt · 最后更改: 2011/02/18 19:14 由 loader