我正在尝试在.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变量。我不确定如何回答这个问题。
有什么建议吗? 谢谢, --techno-巫师
答案 0 :(得分:1)
您的声明中存在一些问题。首先是你需要逃避内部双引号"
,否则你将关闭并重新打开它们。第二个问题是,$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)"
}
答案 1 :(得分:0)
先前的答案似乎有一个错误-第一个双引号位于-v之前,并且-v部分需要一个前导空格。
此外,由于在cmd行上提供了IP地址,因此不需要$(dig ...),
function ip2asn(){whois -h v4.whois.cymru.com“ -v $ 1”; }
对我来说很好。
示例:
ip2asn 159.135.32.14
AS | IP | BGP前缀| CC |注册表|已分配AS名称
53824 | 159.135.32.14 | 159.135.32.0/20 |美国|阿琳| 2015-10-21 |美国利基韦伯
但是,如果保留$(dig ...),则该函数可以重命名(并使用)为domainName2asn,例如
function domainName2asn(){whois -h v4.whois.cymru.com“ -v $(dig $ 1 A + short)”; }
domainName2asn redhat.com
AS | IP | BGP前缀| CC |注册表|已分配AS名称
31976 | 209.132.183.105 | 209.132.182.0/23 |美国|阿琳| 2004-01-22 |美国REDHAT-0
是的,我知道这是一个非常老的线程:J