0

这是我的 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

谁能解释一下为什么会出现这个错误以及如何解决它?

谢谢。

4

4 回答 4

1
awk '/[ \t]+'$1'\/'$2'/ { print $1 }' /etc/services
于 2013-05-13T07:56:30.967 回答
0

有点难以理解,但是...... $(whatever) 执行它的输出......所以,假设

$(awk '/[ \t]+'$1'\/'$2'/' /etc/services)

$() 中的部分将您作为输出

ftp blahblahblah

它将首先尝试执行它,并且只有在将执行输出传递给第二个 awk 管道之后。

只需删除 $() 语法,这样第一个 awk 的输出将被发送到后面的步骤。

顺便说一句,请,而不是做

cat xxxx | dosomething

尝试做

dosomething xxxxx
于 2013-05-13T07:42:55.390 回答
0

为什么要使用$( ... )构造?它被 bash 封闭命令的输出所取代,所以你的管道变成了类似的东西

ftp   21/tcp   xxx_master    # ftp / XXX

这会触发上述错误。

解决方案:只需删除$(and)一切都应该按您的预期工作。

于 2013-05-13T07:39:21.740 回答
0
awk '$2==A && $3=B, NF=1' FPAT='[^ /]+' A=$1 B=$2 /etc/services
于 2013-05-13T07:39:33.130 回答