我在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?
答案 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}'
"'"
'`'
(是的,这可以简化,但我希望为包含单引号的别名命令显示一致的一般过程。)