在分叉过程之后在bash中获取第一行参数

时间:2013-05-13 07:29:26

标签: bash

这是我的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 个答案:

答案 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