当前位置: 首页 > 面试题库 >

Shell脚本输入重定向异常

杜俊风
2023-03-14
问题内容

谁能解释这种行为?运行:

#!/bin/sh
echo "hello world" | read var1 var2
echo $var1
echo $var2

导致没有输出,而:

#!/bin/sh
echo "hello world" > test.file
read var1 var2 < test.file
echo $var1
echo $var2

产生预期的输出:

hello
world

管道不应该一步一步地执行第二个示例中对test.file的重定向吗?我对破折号和bash壳都尝试了相同的代码,并且两者的行为相同。


问题答案:

bashlastpipe选项最近添加了一个选项,当停用作业控制时,该选项允许管道中的最后一条命令在当前外壳程序中运行,而不是子外壳程序中运行。

#!/bin/bash
set +m      # Deactiveate job control
shopt -s lastpipe
echo "hello world" | read var1 var2
echo $var1
echo $var2

确实会输出

hello
world


 类似资料:
  • 1. Shell 重定向 1.1 Shell 重定向是什么 我们在之前章节有学习 echo/printf 来将我们的需求输出,此时就是我们将系统的返回输出到我们标准终端,使得我们能够看到正常的输出的结果,Unix 命令默认的输入设备即 stdin 为键盘,标准和错误设备即 stdout 为显示器,我们利用重定向可以将输入改为文件,或者将输出重新定向到其他设备或文件中。 1.2 为什么要用重定向 我

  •   大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。 命令 说明 command > file 将输出重定向到 file。 command < file 将输入重定向到 file。 command >> file 将输出以

  • 本文向大家介绍linux shell数据重定向(输入重定向与输出重定向)详细分析,包括了linux shell数据重定向(输入重定向与输出重定向)详细分析的使用技巧和注意事项,需要的朋友参考一下 在了解重定向之前,我们先来看看linux 的文件描述符。 linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操

  • 问题内容: 我试图这样做以确定是否将stdin重定向到文件: 但这不起作用,因为当变量$ input为“&0”时,bash会将其解释为文件名。 但是,我可以这样做: 问题在于./myScript实际上是一个长长的命令行,我不想重复,也不想为其创建函数,因为它也不那么长(不值得)。 然后我想到这样做: 但这需要再运行一个命令和一个管道(即子外壳)。 还有另一种更简单,更有效的方法吗? 问题答案: 首

  • 问题内容: 我正在尝试使用C为Linux创建一个基本的shell。在我尝试进行输出重定向之前,它已经可以工作了,并且它破坏了一切。当我运行此代码时,它直接进入fork()的默认情况。我不知道为什么。如果我在子进程中摆脱了for循环,那么它就可以工作,但是即使有了for循环,我也不明白为什么子进程甚至从未输入。如果将打印语句放在子进程的顶部,则不会打印出来。 当我在命令行中运行此命令时,我得到提示并

  • 问题内容: 我正在AIX 6上工作,在KIX Shell上运行Java命令,并且正在尝试调试类加载问题。我放了-verbose:class来打印加载的类,然后>> / home / user / log.log将控制台放到一个文件中。已创建log.log文件,但其大小为零。文件不包含任何信息,所有详细信息都在一闪而过。 问题答案: 也尝试重定向: 您的Java代码可能正在编写您的命令未重定向的信息