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

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

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

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

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

alias chrandmac='sudo ifconfig en0 ether 83:3a:bf:fc:4e:29'

对于为什么会发生这种情况有什么想法吗?

答案1

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

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

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

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

相关内容