这是我的 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
谁能解释一下为什么会出现这个错误以及如何解决它?
谢谢。
这是我的 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
谁能解释一下为什么会出现这个错误以及如何解决它?
谢谢。
awk '/[ \t]+'$1'\/'$2'/ { print $1 }' /etc/services
有点难以理解,但是...... $(whatever) 执行它的输出......所以,假设
$(awk '/[ \t]+'$1'\/'$2'/' /etc/services)
$() 中的部分将您作为输出
ftp blahblahblah
它将首先尝试执行它,并且只有在将执行输出传递给第二个 awk 管道之后。
只需删除 $() 语法,这样第一个 awk 的输出将被发送到后面的步骤。
顺便说一句,请,而不是做
cat xxxx | dosomething
尝试做
dosomething xxxxx
为什么要使用$( ... )
构造?它被 bash 封闭命令的输出所取代,所以你的管道变成了类似的东西
ftp 21/tcp xxx_master # ftp / XXX
这会触发上述错误。
解决方案:只需删除$(
and)
一切都应该按您的预期工作。
awk '$2==A && $3=B, NF=1' FPAT='[^ /]+' A=$1 B=$2 /etc/services