linux - ASN 查找别名不起作用

标签 linux bash shell

我正在尝试在我的 .bashrc 配置文件中使用以下别名:

alias ip2asn="IP=$(dig $1 a +short);whois -h v4.whois.cymru.com " -v $IP""

命令本身没有问题,但是当我在 .bashrc 中创建别名并尝试获取 ~./bashrc 时,我得到以下输出:

$ source .bashrc
bash: alias: -v: not found
bash: alias: k.root-servers.net.: not found
bash: alias: d.root-servers.net.: not found
bash: alias: c.root-servers.net.: not found
bash: alias: e.root-servers.net.: not found
bash: alias: f.root-servers.net.: not found
bash: alias: m.root-servers.net.: not found
bash: alias: g.root-servers.net.: not found
bash: alias: b.root-servers.net.: not found
bash: alias: j.root-servers.net.: not found
bash: alias: i.root-servers.net.: not found
bash: alias: h.root-servers.net.: not found
bash: alias: a.root-servers.net.: not found
bash: alias: l.root-servers.net.: not found

我注意到 bash shell 似乎在执行别名后仍保留 $IP 变量。我不确定如何回应这个问题。

有什么建议吗? 谢谢, --技术萨满

最佳答案

您的声明中存在一些问题。首先是您需要转义内部双引号 ",否则您将关闭并重新打开它们。第二个问题是您的 $IP 正在扩展别名声明,而不是在您使用它时。

关于 $IP 在执行别名时幸存下来:别名只不过是为您键入的命令。您根本不应该使用变量或创建子 shell - 用 () 包含所有内容。

alias ip2asn='(IP=$(dig $1 a +short);whois -h v4.whois.cymru.com -v "$IP")'

无论如何我认为这不会像您预期的那样工作,别名不会接收那样的参数,这个 $1 不会工作。听起来你需要一个功能:

ip2asn() {
  whois -h v4.whois.cymru.com -v "$(dig "$1" a +short)"
}

关于linux - ASN 查找别名不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35649119/

相关文章:

linux - 将设备驱动程序实现为一组内核模块

linux - Debian Wheezy 7.5-用户 session 中未加载变量LD_LIBRARY_PATH

php - 为 Apache 而不是 CLI 启用 PHP 扩展

php - 通过php执行shell命令并在浏览器中显示?

linux - 当已经 sshed 到另一台计算机时如何指定本地计算机?

linux - 是否可以比较双重压缩文件?

regex - 如何将 sed 与正则表达式一起使用

linux - 格式化文本 Awk Sed

linux - 如果他们的 etime 大于 X 时间量,我如何终止特定进程?

ruby - 自动上传 xmodem 文件