我正在尝试为一个笨重的命令创建一个别名,我用它来输出 PID 以及有关我运行的两个 Rails 服务器的其他一些信息。
当我简单地在终端中运行命令(通过 ssh)时:
vagrant@Railsvr:~$ ps aux | grep rails | grep -v grep | awk '{print $2, $12, $13, $14, $15}'
我得到了想要的信息:
3266 bin/rails server -dp 3000
3383 bin/rails s -dp 4000
但是当我将它放入 ~/.bash_aliases 中的别名(包含在 ~/.bashrc 中)
alias findrails_pid="ps aux | grep rails | grep -v grep | awk '{print $2, $12, $13, $14, $15}'"
和来源:
. ~/.bashrc
它打破了......我得到:
vagrant@Railsvr:~$ findrails_pid
awk: {print , 2, 3, 4, 5}
awk: ^ syntax error
就好像 $n(代表 ps aux 命令中的列)由于某种原因被删除了。这是我尝试创建的第一个别名 - 我错过了什么吗?
不确定这是否重要 - 系统是 Debian 8.1 主机上由 libvirt-kvm 托管的 ubuntu precision32 guest box。
答案1
是的,函数可能会更好,但在这种情况下,问题可能是因为您在它周围使用了双引号。 $ 变量在分配给别名之前被扩展。您可以在外部使用单引号,或者,因为您已经有单引号,所以用 \ 转义 $:
别名 findrails_pid="ps aux | greprails | grep -v grep | awk '{print \$2, \$12, \$13, \$14, \$15}'"