3

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

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

含义 - 它将搜索我拥有的所有项目并使用它们的第一个字段作为参数激活“somescript”。

但是,当我尝试为同一行添加别名时,它会卡住我的外壳(或者如果我将大括号与撇号分开,则会发出错误消息:

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

将导致

{: 找不到相关命令

打印:找不到命令

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

知道如何在不杀死我的外壳的情况下给这个东西(和类似的东西 - 这只是一个例子)起别名吗?

4

1 回答 1

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}'
"'"
'`'

(是的,这可以简化,但我想展示一个一致的、通用的过程,用于对包含单引号的命令进行别名处理。)

于 2013-04-30T15:13:28.863 回答