带有if-then-else条件的tcsh别名
我试图在命令结果中使用if-then-else条件 的别名。带有if-then-else条件的tcsh别名
- 别名会得到一个文件模式
- 如果只有一个文件,它会打开文件
- 如果有更多或小于1名的文件 - 它将有消息表明。
我已经试过别名:
alias atest 'if \("ls \!:1" > 0 \) "nedit ls \!:1" else "echo cant open the file" '
你不能用一个别名做到这一点。别名只能展开为单行命令,但if
需要多行。
而是使用shell脚本。该脚本不必使用交互式使用的相同语言,因此您可以使用POSIX shell,通常认为它比编写C shell更好(请参阅Csh Programming Considered Harmful)。
将这个在名为atest
文件,给它执行权限,并把它放在一个目录在你的$PATH
。
你也可以使用'alias atest source〜/ .tcsh/atest.tcsh'(这有缺点,你需要小心不要打破全局shell状态,尽管修改shell状态也可能是某些功能的一部分例)。 – Carpetsmoker
@Carpetsmoker我很久没用过tcsh了。脚本可以使用'source'访问命令行参数吗? – Barmar
不是直接的,但您可以在源脚本可以读取的父脚本中设置变量。 – Carpetsmoker
我不认为你可以用别名做到这一点。使用shell脚本。 – Barmar
将'ls \ !: 1'放在引号中时,它不会执行该命令。所以你只是将字符串与'0'进行比较,不包括匹配模式的文件数量。 – Barmar
您需要类似'\'ls \ !: 1 | wc -l \''来计算命令打印的行数。 – Barmar