1

I have a 2 files: test and input1. The following is my "test" file:

echo $1 $2

Changing the output works as when I write in the terminal:

./test foo bar > input1 

the string "foo bar" is written to input1. Yet, when I write in the terminal:

./test < input1

all that is printed in the terminal is a skipped line.

Any ideas why "foo bar" is not getting printed to the terminal?

4

3 回答 3

0

这是因为test不回显标准输入,它回显命令参数

$1$2代表命令行上的第一个和第二个参数,它们是测试的回声。

小于 ("<") 表示法重定向标准输入(默认情况下,交互式 shell 中的控制台),并且您将发送到test的标准输入重定向到来自input1,但test甚至不查看标准输入,它只查看命令行参数。

为了让 shell 表现得更像你期望的那样,你必须获取input1的内容并将其放入传递给test的命令参数中。

也许这就是你想要的:

./test $(cat input1)
于 2012-11-30T03:45:17.803 回答
0

做你想做的事,你应该做:

./test `cat input1`

这样, input1 的内容将作为参数传递给命令,而不是作为标准输入。

假设 input1 的内容是:

a b c

这与调用你的脚本是一样的:

./test a b c

在您的脚本中,您将收到 a、b 和 c 作为变量:

$# = 3
$1 = 'a'
$2 = 'b'
$3 = 'c'

但是,假设您想在脚本中使用 input1 作为标准输入。所以你会这样调用你的脚本:

./test < input1

在您的脚本中,假设您要将 input1 的内容传递给grep. 你会做这样的事情:

grep b <1 

这将在 input1 文件中搜索字符串“b”。

要查看更多示例,请查看此页面: http: //www.mathinfo.u-picardie.fr/asch/f/MeCS/courseware/users/help/general/unix/redirection.html

于 2012-11-30T03:47:25.437 回答
0

输入可以在 bash 中重定向如下(我还是 Linux 新手):

cat <& 0

这里, 0, 代表Console Input, 而, 1, 将代表Console Outputand,2代表Console Error Output.

于 2018-02-12T20:56:27.717 回答