我想写个扫描端口的 alias
先在 zsh 里直接试: netstat -tln | awk '(NR>2) {print $4}
输出是:
0.0.0.0:80 127.0.0.53:53 0.0.0.0:443 0.0.0.0:9000 :::80 :::9184 :::60000 :::9000 :::9001
在 .zshrc 里: alias sop="netstat -tln | awk '(NR>2) {print $4}'" source 之后 sop 的输出居然是:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN tcp6 0 0 :::80 :::* LISTEN tcp6 0 0 :::9184 :::* LISTEN tcp6 0 0 :::60000 :::* LISTEN tcp6 0 0 :::9000 :::* LISTEN tcp6 0 0 :::9001 :::* LISTEN
请问造成 awk 这种行为不一致的原因是什么呢? BTW, sop => scan open ports, 系统 Ubuntu 20.04 x86_64, VPS
![]() | 1 lcdtyph 2021-01-18 13:06:43 +08:00 via iPhone 因为$4 在执行 alias 的时候就被代换成空字符串了,你需要在 alias 的时候把$给转译了 |
![]() | 2 debuggerx 2021-01-18 13:10:38 +08:00 搜索引擎关键词: 'alias awk' |
![]() | 3 pkookp8 2021-01-18 13:13:43 +08:00 via Android 更像是 awk 没执行 |
![]() | 4 sammyM 2021-01-18 13:48:17 +08:00 应该这样写吧 alias sop='netstat -tln|awk "(NR>2){print \$4}"' |
5 vision1900 OP @pkookp8 还是执行了的,只是删除了 netstat 的前两行输出,哈哈 |
6 vision1900 OP @lcdtyph 谢谢大佬,问题已经解决,我说 $4 的颜色和周围的字符不一样呢 |
8 Jirajine 2021-01-18 13:51:00 +08:00 via Android 不要用 alias,用 function |
9 vision1900 OP @sammyM 是的,要转译美刀符,我搞了个简洁输出的版本出来: ``` alias sop="netstat -tln | awk '(NR>2) {print \$4}' | rev | cut -d':' -f1 | rev | sort -n | uniq" ``` |
10 vision1900 OP @Jirajine 试了下 function 确实可以,谢了 |