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 读取命令在循环外不起作用 的相关文章

  • 制作一个js数组,输入框的值用空格分隔

    我正在尝试使用文本框进行用户输入并将它们放入数组中 基本上 如果用户输入像这样的字符串 10 23 4566 234 10 我希望将数字放入 10 23 4566 234 10 等数组中 这可能吗 我只处理数字 字符串可能会很长 你会想要使
  • 如何在 Bash 中按自然顺序循环文件?

    我使用以下命令循环目录中的所有文件 for i in fas do some code done 不过 我按这个顺序得到它们 vvchr1 fas vvchr10 fas vvchr11 fas vvchr2 fas 代替 vvchr1 f
  • 在 VBA 中捕获 shell 命令的输出值?

    发现这个功能http www cpearson com excel ShellAndWait aspx http www cpearson com excel ShellAndWait aspx 但我还需要捕获 shell 的输出 有什么代
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Bash while 循环等待任务完成

    我创建了一个 bash 脚本来处理文件夹及其子文件夹中的视频 find type f name mkv while read file do ffmpeg i file done 问题 它不是 while 循环等待 ffmpeg 完成 而是
  • 在 Bash 中替换垂直线

    我很难完成我的脚本 因为这一部分没有按照我想要的方式运行 我的脚本中有这一行 cat home tmp temp1 txt awk gsub RS gsub RS print gt home tmp temp txt 效果很好 是的 但是当
  • Bash for Windows 10 gcc 不会编译粘贴到根目录中的 c 文件

    正如标题所示 如果我将在其他地方编写的c文件粘贴到Linux子系统的根目录中 则无法编译它 我做了一个测试 我制作了两个不同标题的 hello world 程序 一个在 vi 中 我可以从 bash 界面进入 另一个在其他地方 当我编译了
  • GIT 和 Ruby:如何从 ruby​​ 脚本内部取消设置 GIT_DIR 变量?

    我编写了一个非常简单的 部署 脚本作为我的post update挂钩到我的裸 git 存储库中 变量如下 live domain mydomain com staging domain stage mydomain com git repo
  • bash 脚本抱怨文件名太长

    所以我有一个脚本可以执行此操作 jq 是命令行 JSON 处理器 echo Getting LB Node IDs echo LB STATUS jq loadBalancer nodes id 最后一行的输出是 1 2 3 但是当我尝试将
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 无法在 Visual Studio Code 的 C# 输出上键入任何内容

    所以我试图在 vscode 上运行一个非常基本的 C 程序 代码如下 using System namespace HelloWorld class Program static void Main string args string N
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 如何安装 grunt-cli 而不出现错误?

    灵感来自 Chris Coyierpost http 24ways org 2013 grunt is not weird and hard 我决定尝试一下 grunt 但我在设置时遇到了很大的问题 首先 我安装了 Node js 然后我将
  • 使用脚本从网站中提取电子邮件地址

    给定一个网站 我想知道以编程方式和 或使用脚本的最佳程序是什么 以纯文本形式提取每个页面上存在的所有电子邮件地址 电子邮件受保护 cdn cgi l email protection从该链接和下面的所有站点 递归或直到某个固定深度 使用 s
  • 使用 python 脚本更改 shell 中的工作目录

    我想实现一个用户态命令 它将采用其参数之一 路径 并将目录更改为该目录 程序完成后 我希望 shell 位于该目录中 所以我想实施cd命令 但需要外部程序 可以在 python 脚本中完成还是我必须编写 bash 包装器 Example t
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 设置 git 别名,但调用它会给出“找不到命令”

    我想在 git 中设置一个别名来计算存储库中的总行数 因此我进入 Git Bash 并输入以下内容 git config global alias linecount ls files z xargs 0 wc l 我输入命令后 没有出现错
  • 在 macOS 上使用 find 时出现“非法选项”错误

    我试图列出末尾仅带有字母 R 的文件 我用了find在 macOS 终端中如下所示 find type f name R 但我收到消息说illegal option t 第一个参数find是它应该开始寻找的路径 路径 表示当前目录 find
  • 测试 bash shell 脚本[重复]

    这个问题在这里已经有答案了 有人可以解释一下如何测试 bash shell 脚本吗 例如 我有一个 sh 文件 其中包含此代码 bin sh for file in txt do mv file basename file txt doc

随机推荐

  • 使用 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