带有if-then-else条件的tcsh别名

问题描述:

我试图在命令结果中使用if-then-else条件 的别名。带有if-then-else条件的tcsh别名

  1. 别名会得到一个文件模式
  2. 如果只有一个文件,它会打开文件
  3. 如果有更多或小于1名的文件 - 它将有消息表明。

我已经试过别名:

alias atest 'if \("ls \!:1" > 0 \) "nedit ls \!:1" else "echo cant open the file" ' 
+0

我不认为你可以用别名做到这一点。使用shell脚本。 – Barmar

+0

将'ls \ !: 1'放在引号中时,它不会执行该命令。所以你只是将字符串与'0'进行比较,不包括匹配模式的文件数量。 – Barmar

+0

您需要类似'\'ls \ !: 1 | wc -l \''来计算命令打印的行数。 – Barmar

你不能用一个别名做到这一点。别名只能展开为单行命令,但if需要多行。

而是使用shell脚本。该脚本不必使用交互式使用的相同语言,因此您可以使用POSIX shell,通常认为它比编写C shell更好(请参阅Csh Programming Considered Harmful)。

​​

将这个在名为atest文件,给它执行权限,并把它放在一个目录在你的$PATH

+0

你也可以使用'alias atest source〜/ .tcsh/atest.tcsh'(这有缺点,你需要小心不要打破全局shell状态,尽管修改shell状态也可能是某些功能的一部分例)。 – Carpetsmoker

+0

@Carpetsmoker我很久没用过tcsh了。脚本可以使用'source'访问命令行参数吗? – Barmar

+0

不是直接的,但您可以在源脚本可以读取的父脚本中设置变量。 – Carpetsmoker