tcsh中无法用-h测试标志判断符号链接,脚本报错求排查
解决tcsh中判断符号链接的报错问题
你在tcsh里用-h作为符号链接的测试标志确实是操作有误哦——tcsh的文件测试操作符和bash等shell存在差异,-h在tcsh里并不是用来判断符号链接的,它的作用是测试文件是否带有hidden隐藏属性(对应chflags设置的hidden标记),这就导致你的条件判断被错误识别为数值相关检查,从而抛出Error: if: Badly formed number的报错。
正确的写法
在tcsh中,判断一个文件是否为符号链接,需要使用-l这个测试操作符。修正后的代码如下:
#!/bin/tcsh foreach i (`ls`) if ( -l "$i" ) then echo $i endif end
额外优化建议
另外,用ls命令的输出结果来遍历文件并不是最佳实践,当遇到文件名包含空格、特殊字符时容易出现遍历错误。更稳妥的方式是直接用通配符*来遍历当前目录下的所有文件:
#!/bin/tcsh foreach i (*) if ( -l "$i" ) then echo $i endif end
这样就能更可靠地筛选出当前目录下的所有符号链接文件啦。
内容的提问来源于stack exchange,提问作者Chaitanya Tallapaneni
相关产品推荐
相关产品推荐

