这是我的file.sh bash脚本:
#!/bin/bash
$(awk '/[ \t]+'$1'\/'$2'/' /etc/servicies) | awk '{print '$1'}';
如果我跑:
file.sh 21 tcp
它应该打印ftp。但我得到了这个错误:
./file.sh: line 2: ftp: command not found
有人可以解释一下为什么会出现这个错误以及如何修复它?
感谢。
答案 0 :(得分:1)
awk '/[ \t]+'$1'\/'$2'/ { print $1 }' /etc/services
答案 1 :(得分:0)
为什么使用$( ... )
构造?它被bash附带的命令输出所取代,因此您的管道就像
ftp 21/tcp xxx_master # ftp / XXX
会触发上述错误。
解决方案:只需删除$(
和)
,一切都应该按预期工作。
答案 2 :(得分:0)
awk '$2==A && $3=B, NF=1' FPAT='[^ /]+' A=$1 B=$2 /etc/services
答案 3 :(得分:0)
有点难以理解,但...... $(无论如何)执行其输出...... 所以,假设
$(awk '/[ \t]+'$1'\/'$2'/' /etc/services)
$()中的部分将您作为输出
ftp blahblahblah
它将首先尝试执行它,并且只有在将执行输出传递给第二个awk管道之后才会执行它。
只需删除$()语法,这样第一个awk的输出就会被发送到后面的步骤。
请原谅,而不是做cat xxxx | dosomething
尝试做
dosomething xxxxx