命令不能用作别名
Command does not work as alias
我有两个有效的命令:
awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print } {p=[=10=]}' ~/.my.cnf
perl -00 -ane '/\[client\].password=(\S+)/s && print ' < ~/.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 ' < ~/.my.cnf"
alias mysql-get-password2="awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print } {p=[=12=]}' ~/.my.cnf"
perl 一returns
[client]
password=pass2 # comment
port=3306
user=test
socket=/var/lib/mysql/mysql.sock
和 awk 变体 returns
password=pass1 # comment
password=pass2 # comment
为什么结果与别名如此不同?当我直接在 shell 中使用命令时,我只得到 pass2
别名用于像 alias lf='ls -F'
这样的简单命令,对于任何更复杂的命令,您应该使用函数:
function mysql_get_password2 {
awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print } {p=[=10=]}' ~/.my.cnf
}
并非所有 shell 都支持函数或别名中的连字符,顺便说一句,因此最好避免使用它们以实现可移植性 - 请参阅 https://unix.stackexchange.com/questions/168221/are-there-problems-with-hyphens-in-functions-aliases-and-executables
你必须转义 $
因为 </code> 被 shell 解释:</p>
<pre><code>alias mysql-get-password="perl -00 -ane '/\[client\].password=(\S+)/s && print $1' < ~/.my.cnf"
# here ___^
我有两个有效的命令:
awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print } {p=[=10=]}' ~/.my.cnf
perl -00 -ane '/\[client\].password=(\S+)/s && print ' < ~/.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 ' < ~/.my.cnf"
alias mysql-get-password2="awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print } {p=[=12=]}' ~/.my.cnf"
perl 一returns
[client]
password=pass2 # comment
port=3306
user=test
socket=/var/lib/mysql/mysql.sock
和 awk 变体 returns
password=pass1 # comment
password=pass2 # comment
为什么结果与别名如此不同?当我直接在 shell 中使用命令时,我只得到 pass2
别名用于像 alias lf='ls -F'
这样的简单命令,对于任何更复杂的命令,您应该使用函数:
function mysql_get_password2 {
awk -F'[= ]' '/^password=/ && p !~ /clientreadonly/{print } {p=[=10=]}' ~/.my.cnf
}
并非所有 shell 都支持函数或别名中的连字符,顺便说一句,因此最好避免使用它们以实现可移植性 - 请参阅 https://unix.stackexchange.com/questions/168221/are-there-problems-with-hyphens-in-functions-aliases-and-executables
你必须转义 $
因为 </code> 被 shell 解释:</p>
<pre><code>alias mysql-get-password="perl -00 -ane '/\[client\].password=(\S+)/s && print $1' < ~/.my.cnf"
# here ___^