【发布时间】:2012-11-30 03:41:20
【问题描述】:
我有 2 个文件:test 和 input1。 以下是我的“测试”文件:
echo $1 $2
更改输出的工作方式与我在终端中写入时一样:
./test foo bar > input1
字符串“foo bar”被写入 input1。 然而,当我在终端上写:
./test < input1
在终端中打印的所有内容都是跳过的行。
知道为什么“foo bar”没有打印到终端吗?
【问题讨论】:
我有 2 个文件:test 和 input1。 以下是我的“测试”文件:
echo $1 $2
更改输出的工作方式与我在终端中写入时一样:
./test foo bar > input1
字符串“foo bar”被写入 input1。 然而,当我在终端上写:
./test < input1
在终端中打印的所有内容都是跳过的行。
知道为什么“foo bar”没有打印到终端吗?
【问题讨论】:
这是因为 test 不回显标准输入,而是回显命令参数。
值$1 和$2 代表命令行中的第一个和第二个参数,它们是测试回显的内容。
小于 ("test 的标准输入重定向为来自 input1 ,但 test 甚至不查看标准输入,它只查看命令行参数。
要让 shell 的行为更像您的预期,您必须获取 input1 的内容并将其放入传递给 test 的命令参数中。
也许这就是你想要的:
./test $(cat input1)
【讨论】:
要做你想做的,你应该做:
./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
【讨论】:
输入可能会在 bash 中重定向如下(我还是 Linux 新手):
cat <& 0
这里,0,代表Console Input,而1,代表Console Output,2代表Console Error Output。
【讨论】: