[请不要建议我不要使用csh。电气工程界与它密不可分。谢谢!]
当我这样做时:
csh -f -c "alias foo bar; foo"
我明白了:
foo:找不到命令。
同样,当我这样做时:
#!/bin/csh -f
alias foo bar; foo
我得到了相同的foo: Command not found.
。但是,这可以按预期工作:
#!/bin/csh -f
alias foo bar
foo
给出了:
bar:找不到命令。
这只是csh / tcsh中的一个错误吗?或者这是故意的吗?我必须处理别名,因为我使用的环境在很大程度上依赖于它们来配置工具集(包括模块)。但这基本上意味着我无法使用csh -f -c调用短csh脚本。我必须将命令转储到文件chmod + x,然后调用它。没什么大不了的。但我只是想知道是否有办法欺骗这个bug / quirky shell来识别在同一行上定义的别名。
答案 0 :(得分:4)
这是csh的记录行为:别名替换发生在每个输入行被读取并拆分成命令之后,但在执行任何命令之前(包括你的alias
命令)。
来自csh(1)
手册:
别名替换
shell维护一个可以建立,显示的别名列表 并由
alias
和unalias
命令修改。扫描命令行后,它将被解析为不同的命令和每个命令的第一个单词 检查命令(从左到右)以查看它是否具有别名。如果它 确实如此,然后重新读取该命令的别名文本 历史机制可用,就好像该命令是前一个 输入线。生成的单词将替换命令和参数列表。 如果没有引用历史列表,那么参数列表是 保持不变。