【问题标题】:Redirecting Input in Linux在 Linux 中重定向输入
【发布时间】:2012-11-30 03:41:20
【问题描述】:

我有 2 个文件:test 和 input1。 以下是我的“测试”文件:

echo $1 $2

更改输出的工作方式与我在终端中写入时一样:

./test foo bar > input1 

字符串“foo bar”被写入 input1。 然而,当我在终端上写:

./test < input1

在终端中打印的所有内容都是跳过的行。

知道为什么“foo bar”没有打印到终端吗?

【问题讨论】:

    标签: linux redirect terminal


    【解决方案1】:

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

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

    小于 ("test 的标准输入重定向为来自 input1 ,但 test 甚至不查看标准输入,它只查看命令行参数。

    要让 shell 的行为更像您的预期,您必须获取 input1 的内容并将其放入传递给 test 的命令参数中。

    也许这就是你想要的:

    ./test $(cat input1)
    

    【讨论】:

      【解决方案2】:

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

      ./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

      【讨论】:

      • 那么将打印由
      • 澄清一下 - 我正在 Linux 中尝试重定向,我想编写一个简单的脚本来适当地从文件中获取输入。
      【解决方案3】:

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

      cat &lt;&amp; 0

      这里,0,代表Console Input,而1,代表Console Output2代表Console Error Output

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多