2017-07-29 105 views
1

工作,我有这个两个命令的工作:命令不作为别名

awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print $2} {p=$0}' ~/.my.cnf 
perl -00 -ane '/\[client\].password=(\S+)/s && print $1' < ~/.my.cnf 

他们可以从这样的.my.cnf用grep PASS2:

# longer 
# comment text 

[clientreadonly] 
password=pass1 # comment 
port=3306 
user=test_ro 
socket=/var/lib/mysql/mysql.sock 

[client] 
password=pass2 # comment 
port=3306 
user=test 
socket=/var/lib/mysql/mysql.sock 

但是,如果我让他们为别名:

alias mysql-get-password="perl -00 -ane '/\[client\].password=(\S+)/s && print $1' < ~/.my.cnf" 
alias mysql-get-password2="awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print $2} {p=$0}' ~/.my.cnf" 

perl的一个返回

[client] 
password=pass2 # comment 
port=3306 
user=test 
socket=/var/lib/mysql/mysql.sock 

和awk的变种回报

password=pass1 # comment 
password=pass2 # comment 

为什么结果作为别名如此不同?当我在外壳直接使用命令,我得到的只是pass2

+0

提示:'-00'应该是'-0777'。前者实际上并不sl;;后者的确如此。 – ikegami

回答

1

你必须逃离$因为$1由shell来解释:

alias mysql-get-password="perl -00 -ane '/\[client\].password=(\S+)/s && print \$1' < ~/.my.cnf" 
#                  here ___^ 
+0

或者使用单引号,取代嵌入的单引号值''''''' – ikegami