Bash 读取命令在循环外不起作用

2024-04-07

我一定错过了一些关于 Bash read 命令的非常基本的东西。在 shell 提示符下,无法将三个输入字段分配给相应的变量:

% echo a b c | read x1 x2 x3
% echo $x1 $x2 $x3

% 

这虽然有效:

% echo a b c | while read x1 x2 x3 ; do
> echo $x1 $x2 $x3
> done
a b c
%

我只需要读取一行输入。此处使用 while 循环是不正确的,因为当循环的子进程退出时,我会丢失 x1、x2 和 x3 的值。我必须将访问它们的所有代码放在循环体中(并且可能在最后中断,为了“清晰”),这看起来非常h​​ackish。在 if 命令中使用它也可以,但会遇到与 while 循环相同的子进程问题:

% echo a b c | if read x1 x2 x3 ; then echo $x1 $x2 $x3; fi
a b c
% echo $x1

BASH_VERSION 报告为“4.2.45(1)-release”。


问题出在管道上。来自 bash 手册:

管道中的每个命令都作为单独的进程执行(即,在 一个子外壳)。

你必须做相反的事情,即打电话read在当前流程中并在子流程中生成输入。例如:

$ read x1 x2 x3 < <(echo a b c)
$ echo $x1 $x2 $x3
a b c
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 读取命令在循环外不起作用 的相关文章

  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • bash 支持字边界正则表达式吗?

    我试图在再次添加该单词之前匹配列表中是否存在该单词 以避免重复 我正在使用 bash 4 2 24 并尝试以下操作 foo bmyword b also foo
  • 如何使用我在 github 中发布的 bash 脚本执行 chsh?

    我有一个要点 我总是用它来在新服务器上安装我需要的软件包 http gist github com 4372049 http gist github com 4372049 我需要做的就是通过 ssh 在新服务器中输入以下内容 bash c
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 使用带有curl 的内部字段分隔符

    当我做 ls IFS l 我得到了我期望的输出 当我做 curl IFShttp www google com 我不 我是否误解了内部字段分隔符 如何在不使用任何空格字符的情况下运行curl 命令 您需要将变量放在大括号内 否则 shell
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 如果选中复选框则显示 div

    我正在尝试构建类似 WordPress 选项的东西 用于在创建文章时切换字段可见性 我所构建的依赖于 click函数使用相应的字段名称切换父项 我想知道如果选中该复选框 执行此操作的最佳方法是什么 因为如果您选中一个框并重新加载页面 因为它
  • Javafx 从 TextField 获取输入

    这是我当前的代码 它所做的只是为我制作的计算器设置一个 GUI 界面 我希望用户输入两个值 然后当按下 Sum 按钮时 它将两个值加在一起并将其显示在 Sum 文本字段中 我正在尝试使用 JavaFX 如果您能提供一些帮助 我将不胜感激 i
  • 将一个文本框的值分配给另一个文本框

    看过类似问题的答案 但对于我的一生 我无法弄清楚我做错了什么 我有两个文本框和一个按钮 当文本添加到第一个文本框并按下按钮时 我想将第一个文本框的值 文本应用到第二个文本框
  • 语法错误:for 循环变量不正确

    我正在尝试编写一个可以在后台调高收音机音量的脚本 bin sh for i 80 i lt 101 i do amixer cset numid 1 i sleep 60 done 但我有问题 alarmclock vol sh 3 ala
  • 使用 posix shell 测试字符串中的正则表达式

    如何测试字符串是否与特定字符串匹配正则表达式与基本 无 bash 或任何其他 posix shell 脚本 在 if 语句中 您可以使用expr在 POSIX shell 中计算正则表达式的命令 s Abc expr s alpha 3 e
  • 将文件从不同目录复制到公共目录

    我有很多目录 其中包含 c文件 我想复制全部 c使用 shell 脚本将不同目录中的文件复制到单个目录 find name c exec cp t tmp 启动当前目录中的所有项目 递归 获取名称结尾的项目 c 将这些项目复制到 tmp 如
  • shell脚本中的\r字符

    我在尝试执行 shell 脚本时收到以下错误 r command not found line 2 请提出同样的解决方案 以下是脚本中使用的初始行 bin sh if lt 1 then echo ERROR Environment arg
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • 将相对符号链接转换为绝对符号链接

    如何在 bash 中递归地将相对符号链接转换为绝对符号链接 ln sf readlink f link link
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • 使用 find 命令搜索直到第一个匹配项

    我只需要搜索可以在任何地方的特定目录有没有办法运行此命令直到第一个匹配 谢谢 我现在使用 find noleaf name experiment type d wc l 正如鲁道夫 米尔鲍尔 Rudolf M hlbauer 所提到的 qu
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行

随机推荐

  • 使用 SFINAE 检测成员函数 [重复]

    这个问题在这里已经有答案了 C 11中 判断一个类是否有成员函数size 您可以定义以下测试助手 template
  • 如何包含 Linux 头文件(如 linux/getcpu.h)?

    我在用着Linux 3 5 0 17 generic 28 Ubuntu SMP Tue Oct 9 19 31 23 UTC 2012 x86 64 GNU Linux 我需要 include
  • 如何在每个“exec”命令处执行 Docker 映像的入口点?

    在尝试使用 Dockerspec 测试 Dockerfiles 后 我终于得到了an issue https github com zuazo dockerspec issues 12我无法正确解决 我认为问题出在 Docker 本身 如果
  • 跨平台 Windows / OS X 开发,具有大量现有代码库

    对于使用 MFC 和 WinAPI 用 C 编写的复杂应用程序 有大量现有代码库 需要将其移植到 Mac OS X 理想的解决方案是在不同平台之间拥有尽可能多的通用代码 尤其是诸如业务之类的代码逻辑 GUI 可能会有所不同 具体取决于跨平台
  • 在 64 位 C++ 程序中使用 32 位库

    有什么方法可以在 64 位系统中使用旧的 32 位静态库 a 吗 没有机会获得这个旧库的源代码来再次编译它 我也不想在 gcc 中使用 m32 因为该程序使用许多 64 位库 谢谢 这完全取决于您运行的平台 例如 PowerPC 上的 OS
  • 调试 CoreGraphics/MapKit 中的崩溃

    当我的应用程序在 iPhone 上运行时 我遇到间歇性崩溃 所有崩溃都是相同的 并且以某种方式涉及 MKMapView Overlays MKCircleViews 来自典型的 iPhone 4s 崩溃报告 报告标题 Hardware Mo
  • 如何在 SMPP 中正确表示消息类别

    我目前正在尝试弄清楚 sms 类如何在 SMPP 中正确表示 然而 我现在对标准及其文档完全感到困惑 在普通短信中我们有 Class0 Flash短信 显示在显示屏上 Class1 普通短信存储在 SIM 卡上或设备内部 查看SMPP规范
  • 如何忽略 CMakeLists.txt 中单个 CMake 命令的错误?

    我有一个项目CMakeLists txt尝试读取可能存在或不存在的文件 文件丢失不是问题 脚本可以处理这两种情况 如果我们可以检测到已知的 Linux 发行版 这将用于稍微调整编译环境 file READ etc redhat releas
  • FragmentTransaction.remove 没有效果

    我的要求非常简单 我有一个按钮可以逐个片段地替换片段 这听起来很容易并且几乎可行 最大的问题是旧片段没有被删除 新片段被放置在旧片段的前面 并且它们在我的布局中 生活 在一起 代码 FragmentManager fragMgr a get
  • Xamarin Forms 4.1.0:找不到方法:void .ResourceLoadingQuery.set_Instance(object)

    SOLUTION 解决方案在这里 https github com xamarin Xamarin Forms issues 6787 或者只需确保解决方案中使用 Xamarin Forms 的所有项目均已更新 原始问题 从 4 0 0 4
  • Python functools.lru_cache 驱逐回调或等效函数

    是否可以定义回调functools lru cache当一个项目被驱逐时 在回调中还应该存在缓存的值 如果没有 也许有人知道一个支持驱逐和回调的轻量级类似字典的缓存 我将我使用的解决方案发布出来以供将来参考 我使用了一个名为cachetoo
  • 我可以将多行文本的每一行换行到一个跨度中吗?

    我一直在试图弄清楚如何做到这一点 如果可能的话 并且画了一个空白 我有一些文本将换行为多行 我想检测每一行 并将其包装在一个跨度中 最后 我想为循环数组中的每个范围分配一个类 例如 div I have some text that wra
  • jquery 上有循环 next() 吗?

    这是我的代码 div class container div class prova 1 div div class prova 2 div div class prova 3 div div 我想每 500 毫秒获取每个 div 的内容
  • angular2 @input - 更改检测[重复]

    这个问题在这里已经有答案了 有没有办法监听 Input 的变化 在下面的示例中 每当 inputData 值更改时我希望收到通知 Input inputData InputData 是的 你可以使用OnChanges生命周期事件 Input
  • 自定义按钮上的自定义属性不显示

    我扩展了 Button 小部件 使其能够应用多个自定义属性 其中一个属性是颜色滤镜 我在创建按钮时尝试将其应用于其背景 这是行不通的 请参阅下面的屏幕截图和代码 我尝试在同一代码位置直接设置背景颜色 它确实改变了背景颜色 但这不是我需要的
  • 将多个 DbContext 与通用存储库和工作单元结合使用

    我的应用程序变得越来越大 到目前为止我只有一个MyDbContext其中包含我的应用程序中所需的所有表格 我希望 为了概述 将它们分成多个DbContext like MainDbContext EstateModuleDbContext
  • gruntjs 加载外部配置

    嘿 咕噜大师们 我想将外部配置文件加载到 grunt 中 以便我可以执行以下操作 grunt dev homepage 它会加载homepage config json 然后运行watch grunt dev contact 它会加载con
  • Python 中 doxygen 风格文档字符串的 Vim 语法高亮显示

    我开始与doxygen生成我的 Python 代码的文档 我用doxypy过滤器来预处理 Python 文档字符串 我的目标是在 Python 中对 doxygen 注释进行良好的语法突出显示 当写我的mainpage在专用的 dox 文件
  • RewriteMap 激活

    如何在apache中激活RewriteMap 当我重新启动 apache 时 我尝试在 httpd 配置中运行 rewritemap 它说 此处不允许 RewriteMap 我尝试用谷歌搜索并访问apache 但找不到激活它的方法 有人知道
  • Bash 读取命令在循环外不起作用

    我一定错过了一些关于 Bash read 命令的非常基本的东西 在 shell 提示符下 无法将三个输入字段分配给相应的变量 echo a b c read x1 x2 x3 echo x1 x2 x3 这虽然有效 echo a b c w