shell中的别名,带有重音符号,撇号等

时间:2013-04-30 13:11:26

标签: shell alias csh

我在c-shell中遇到了一个奇怪的行为: 在写下面一行时,我得到了我期望的行为:

    ls -l | grep $USER | somescript `awk -F' ' '{print $1}'`

含义 - 它将搜索我拥有的所有项目,并以第一个字段作为参数激活'somescript'。

但是,当我尝试对相同的行进行别名时,它会阻塞我的外壳(或者如果我将大括号与撇号分开,则会发出错误按摩:

    alias doit 'ls -l | grep $USER | somescript `awk -F' ' '{print $1}'`'

将导致

  

{:未找到命令

     

print:找不到命令

或者根本无法启动新终端,因为它被卡住了。

任何想法怎么可以别名这个东西(和类似的东西 - 这只是一个例子)而不杀死我的shell?

1 个答案:

答案 0 :(得分:3)

欢迎来到csh的地狱。我不确定这个答案会阻止你自杀,但是......

% alias doit 'ls -l | grep $USER | somescript `awk -F'"'"' '"'"' '"'"'{print $1}'"'"'`'

结果:

% alias | grep doit
doit    ls -l | grep $USER | somescript `awk -F' ' '{print $1}'`

它基本上是字符串的串联,每个字符串都是交替引号:

'ls -l | grep $USER | somescript `awk -F'
"'"
' '
"'"
' '
"'"
'{print $1}'
"'"
'`'

(是的,这可以简化,但我希望为包含单引号的别名命令显示一致的一般过程。)