bash 配置文件中解析的别名中的命令替换?

1.6*_*803 10 freebsd bash alias profile command-substitution

我想为随机更改我的mac地址创建一个别名

alias chrandmac="sudo ifconfig en0 ether $(openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//')"
Run Code Online (Sandbox Code Playgroud)

但是命令替换部分在执行配置文件时已经解决了。

alias chrandmac='sudo ifconfig en0 ether 83:3a:bf:fc:4e:29'
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况的任何想法?

jor*_*anm 19

您想使用函数而不是别名。它可以像别名一样放在您的启动文件中:

chrandmac() {
    sudo ifconfig en0 ether $(openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/.$//')
}
Run Code Online (Sandbox Code Playgroud)

为了让它与别名一起工作,您需要使用单引号来防止命令替换的扩展。

alias chrandmac='sudo ifconfig en0 ether $(openssl rand -hex 6 | sed '\''s/\(..\)/\1:/g; s/.$//'\'')'
Run Code Online (Sandbox Code Playgroud)