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