首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Bash for循环中,我是否可以将上一次迭代的stdout读取为stdin?

在Bash for循环中,不能直接将上一次迭代的stdout作为stdin读取。因为在Bash中,stdin(标准输入)、stdout(标准输出)和stderr(标准错误输出)是通过文件描述符(File Descriptor)实现的,并且每次迭代都会重新打开stdin。

然而,可以通过重定向符号 "<" 将stdout写入一个文件,然后在下一次迭代时将该文件作为stdin读取。具体操作如下:

代码语言:txt
复制
#!/bin/bash

for ((i=1; i<=5; i++))
do
    # 将stdout写入文件
    echo "iteration $i" > output.txt

    # 读取文件作为stdin
    read input < output.txt
    echo "input: $input"
done

上述代码中,每次迭代都将"iteration $i"写入output.txt文件,然后再将该文件内容读取为stdin并输出。这样就实现了将上一次迭代的stdout读取为stdin的效果。

请注意,这种方式仅适用于Bash中的for循环,并且需要使用文件作为中间媒介。这种方法在某些特定场景下可能会有一定的应用,但对于大多数情况来说,可能不是一个常见的使用方式。

对于更复杂的需求,可以考虑使用其他编程语言或工具来实现更灵活和高效的处理方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python快速学习第十天

首先指定了读取字符数"4",然后(通过不提供要读取字符数方式)读取了剩下文件。注意,调用open时可以省略模式,因为'r'是默认。...11.2.2 管式输出 UNIXshell(就像GUN bash)中,使用*管道*可以一个命令后面续写其他多个命令,就像下面这个例子(假设是GUN bash)。...如果要尝试实现以上功能,则应该把filename变量设置一个实际文件名。 11.3.1 按字节处理 最常见对文件内容进行迭代方法是while循环中使用read方法。...: break process(line) f.close() 11.3.3 读取所有内容 如果文件不是很大,那么可以使用不带参数read方法一次读取整个文件(把整个文件当做一个字符串来读取...Python近几个版本中(从2.2开始),文件对象是可迭代,这就意味着可以直接在for循环中使用它们,从而对它们进行迭代。如代码清单11-12所示,很优雅,不是吗?

1.2K60

shell十三问,linux学习打基础(三)

(STDERR) 标准情况下,这些FD分别跟如下设备(device)关联: stdin(0):keyboard stdout(1):monitor stderr(2):monitor 我们可以用如下下命令测试一下...许多人都问过那是甚么玩意儿?跟你说好了:那就是“空”啦﹗没错﹗空空如也空就是null了….请问施主是否忽然有所顿误了呢?...stdout或stderr进一份档案时,似乎永远只获得最后一次导入结果。...bash shell中,我们可以如此修改上一段代码: if comd1 then comd2 comd3 else comd4 comd5 fi 这也是我们shell...我们不难看出,for loop中,变量值多寡,决定循环次数。然而,变量环中是否使用则不一定,得视设计需求而定。

97360
  • Python实现cmd命令连续执行

    单开进程 那么自然想到通过启动进程方式来实现,Python有对进程封装subprocess,可以通过创建Popen对象来实现。只要单开一个bash,与它进行交互就好啦。...看到网上有的将输入流关闭就可以了: p.stdin.close() 但是关闭后就不能再次运行命令了,通过查看其对象方法,发现可以直接刷新缓冲区,很好 p.stdin.flush() 但是发现读取文件只有一行...,很明显,没有读完 循环读取 需要循环读取输出缓冲区内容。...读取阻塞 很好,找了半天也没找到解决阻塞办法。那就只能靠自己了,既然它要阻塞,那就随他阻塞好了,单开一个线程去读取,让它一直阻塞去吧。...此方案暂时还不支持sudo命令,回头研究研究 至此,其实还有一个小问题,怎么能知道哪些返回是同一条命令所返回呢?

    3.9K10

    深入理解Node.js进程与子进程

    不推荐直接使用 process.exit(),这会导致事件循环中任务直接不被处理,以及可能导致数据截断和丢失(例如 stdout 写入)。...调用 'exit' 事件监听器之后,Node.js 进程将立即退出,从而导致事件循环中仍排队任何其他工作被放弃。process 标准流对象process 提供了 3 个标准流。...,默认对应屏幕process.stdin:ReadStream 类型,默认对应键盘输入下面是基于“生产者-消费者模型”读取控制台输入并且及时输出代码:process.stdin.setEncoding...深入理解 process.nextTick一次看到 process.nextTick 时候是比较懵,看文档可以知道,它用途是:把回调函数作为微任务,放入事件循环任务队列中。...这意味着可以通过监听其上 data事件,父进程中获取子进程 I/O 。

    2K21

    Linux shell脚本使用while循环执行ssh注意事项

    一、场景还原: 现在是想用一个脚本获取一定列表服务器运行时间,首先建立一个名字ip.txtIP列表(一个IP一行),再建好密钥实现不用密码直接登录。然后写脚本如下: #!.../bin/bash while read ips; do echo $ips; done < ip.txt 脚本实现了逐行读取列表中IP,但是: #!...二、问题分析: while使用重定向机制,ip.txt文件中信息都已经读入并重定向给了整个while语句,所以当我们while循环中一次调用read语 句,就会读取到下一条记录。...问题就出在这里,ssh语句正好回读取输入中所有东西。为了禁止ssh读所有东西增加一个< /dev/null,将ssh 输入重定向输入。...通过man ssh查看-n参数说明: Redirects stdin from /dev/null (actually, prevents reading from stdin) 这就和

    3.9K80

    7.管道、管道、环境变量与其他常用命令

    7.1 管道 概念: 管道类似于文件重定向,可以将前一个命令 stdout 重定向到下一个命令 stdin。 要点: 管道命令仅处理 stdout,会忽略 stderr。...管道右边命令必须能接受 stdin。 多个管道命令可以串联。 与文件重定向区别: 文件重定向左边命令,右边文件。 管道左右两边均为命令,左边有 stdout,右边有 stdin。...wc:统计行数、单词数、字节数 既可以stdin中直接读入内容;也可以命令行参数中传入文件名列表; wc -l:统计行数 wc -w:统计单词数 wc -c:统计字节数 tree:展示当前目录文件结构...3、5个字符 echo $PATH | cut -c 3-5:输出PATH第3-5个字符 sort:将每行内容按字典序排序 可以stdin读取多行数据 可以从命令行参数中读取文件名列表 xargs...内容存放在 ~/.bash_history 中 工具: md5sum:计算md5哈希值 可以stdin 读入内容 也可以命令行参数中传入文件名列表; time command:统计 command

    64530

    Bash中文件描述符详细介绍

    前言 Linux将所有内核对象当做文件来处理,系统用一个size_t类型来表示一个文件对象,比如对于文件描述符0就表示系统标准输入设备STDIN,通常情况下STDIN键盘,如read命令就默认从...STDIN读取数据,当然STDIN值是可以改变,比如将其改成其他文件,这样的话想read等命令就会默认从相应文件读取数据了。...简单地说,一个文件描述符可以和一个文件挂钩,一旦挂钩就可以通过取地址运算符&获得该文件句柄,比如&0就可以获得STDIN设备在内存中句柄(设备系统中也被当做文件处理),可以这样理解,如果是一个shell...其中 exec 是一个 bash 内置命令, 不同于终端中执行命令时会 fork 一个子进程, 通过 exec 执行命令会直接修改当前 shell 进程, 可以通过它执行命令来修改当前 shell...我们通过下面的例子来验证上面的文件描述符交换是否生效: 首先把默认 stderr 重定向到文件 /tmp/stderr 中, 这样终端中就不会看到错误输出了; 当交换完 stderr 和 stdout

    1.2K43

    【知识总结】Shell脚本编程入门

    需要注意是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。...重定向深入讲解 一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件: 标准输入文件(stdin):stdin文件描述符0,Unix程序默认从stdin读取数据。...如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写: $ command > file 2>&1 或者 $ command >> file 2>&1 如果希望对 stdin...和 stdout 都重定向,可以这样写: $ command file2 command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。...如果希望屏蔽 stdout 和 stderr,可以这样写: $ command > /dev/null 2>&1 注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出

    4K20

    swoole_proces实现多进程

    原因是父进程读取子进程返回数据时候,是同步阻塞读取: echo $rec = $process->read();//同步阻塞读取管道数据 导致后果就是父进程依次等待每个进程处理完并返回了内容,才走下一次循环...$redirect_stdin_stdout,重定向子进程标准输入和输出。启用此选项后,子进程内输出内容将不是打印屏幕,而是写入到主进程管道(例如用echo打印内容也写入管道)。...读取键盘输入将变为从管道中读取数据。默认为阻塞读取。 $create_pipe,是否创建管道,启用 $redirect_stdin_stdout后,此选项将忽略用户参数,强制为true。...如果子进程内没有进程间通信,可以设置 false 注意: swoole_process最新1.8.0版本已经禁止Web环境中使用了,所以也只能支持命令行。...进程常驻后台 如果跑服务需要一直常驻后台,可以 $process->start();前面加上: swoole_process::daemon(); 服务会在后台运行。

    71430

    NodeJS模块研究 - process

    开发者可以 uncaughtException 事件中,清除一些已经分配资源(文件描述符、句柄等),不推荐在其中重启进程。...不推荐直接使用 process.exit(),这会导致事件循环中任务直接不被处理,以及可能导致数据截断和丢失(例如 stdout 写入)。...调用 ‘exit’ 事件监听器之后,Node.js 进程将立即退出,从而导致事件循环中仍排队任何其他工作被放弃。 process 标准流对象 process 提供了 3 个标准流。...,默认对应屏幕 process.stdin:ReadStream 类型,默认对应键盘输入 下面是基于“生产者-消费者模型”读取控制台输入并且及时输出代码: process.stdin.setEncoding...深入理解 process.nextTick 一次看到 process.nextTick 时候是比较懵,看文档可以知道,它用途是:把回调函数作为微任务,放入事件循环任务队列中。

    1.5K20

    解决paramiko执行命令超时问题

    paramiko执行命令等待超时时间 stdin, stdout, stderr = self.client.exec_command(cmd,timeout=10,get_pty=True)...其实上面的两种方案都不可行:方案1,需要优化,下面这种直接调用方式会导致test.sh启动不起来 stdin, stdout, stderr = self.client.exec_command(‘...摘录原文: paramiko远程执行后台脚本“阻塞”问题 远程命令通道上线之后,发现在远程脚本中后台再执行另一个脚本,通道会一直等待后台脚本执行完成才会返回,有时甚至会僵死。...②、发起远程执行 本地执行 python test.py,会发现整个脚本不会立即打印run ok,而是等30s之后才打印包括test.sh所有输出信息。...这里只要将脚本执行标准输出重定向到错误输出(1 &2),然后paramiko就可以使用stderr快速读取远程打屏信息了。

    3.9K20

    How to Use the Stdin, Stderr, and Stdout Streams in Bash

    How to Use the Stdin, Stderr, and Stdout Streams in Bash原文How to Use the Stdin, Stderr, and Stdout Streams...它们是stdinstdout和stderr。stdin 全称是标准输入,用于接受用户输入。stdout 完整形式是标准输出,用于将命令输出存储到stdout流中。...stderr 完整形式是标准错误,用于将任何命令产生错误信息存储到数据流中。stdinstdout 和 stderr 相应数字标识符值0、1和2。...>" 或 "1>"用于stdout流。"2"用于stderr流。Uses of Stdin, Stdout, and Stderr下面是一些使用stdinstdout,stderr使用案例。...上面的命令可以看作两个部分,第一部分是读取testdata.txt内容作为输入流,然后输出再输出到 otherfile.txt。

    2.8K40

    《Linux命令行与shell脚本编程大全》第十五章 呈现数据

    每个进程一次最多可以有九个文件描述符 bash shell保留前3个文件描述符(0、 1、 2) 1.STDIN 标准输入(0) STDIN文件代表shell标准输入。...它会读取文件并提取数据,就如同它是键盘上键入。 2.STDOUT 标准输出(1) STDOUT文件描述符代表shell标准输出。 对终端界面来说,标准输出是终端显示器。...bash shell自动赋予了错误消息更高优先级,这样可以集中浏览错误信息了。...创建输入文件描述符 跟上面类似,先将STDIN保存到另外一个文件描述符,然后读取完文件STDIN恢复 例子:   1 #!...它将STDIN过来数据同时发往两处,一处是STDOUT,一处是指定文件。

    1.3K60

    打包压缩加密备份_bash笔记6

    /tmp -xf bash_bundle.tar ab.diff 奇怪技巧: # stdin/stdout # 把打包结果输出到stdout tar -cf - test.sh # 从stdin读取包内容...-j压缩bunzip2格式 tar -a -cf bash.tar.bz2 "*.sh" # --lzma压缩lzma格式(Mac下没有该选项) tar -a -cf bash.tar.lzma tar..."*.sh"; gzip bash.tar zcat 不解压,直接读取gzip压缩文件内容,输出到stdout: # 读取gz文件内容 zcat test.sh.gz P.S.Mac下zcat会强制给输入文件名添上...解压: # 解压到当前目录,不会删除test.sh.zip unzip test.sh.zip 如果发现目标文件已存在,会提示选项是否替换/重命名/取消 更新: # -u用新文件替掉包里 zip test.sh.zip...解密: # 同样,只接受来自stdin,只输出到stdout crypt 口令 test.sh P.S.Mac下没有该命令 gpg GUN privacy guard

    1.2K30

    安服仔偷懒必备技能之自动化主机检查脚本

    ,Paramiko是用py写一个模块,远程连接到Linux服务器,查看上面的日志状态,批量配置远程服务器,文件上传,文件下载等都可以,除此之外还用到了pandas,毕竟要批量的话,要去读取表格数据,...所以这里先获取下IP# stdout 正确输出,stderr错误输出,同时是有1个变量有值stdin, stdout, stderr = ssh.exec_command('ip a|grep inet...找了一段时间之后,发现可以cd到别的文件夹下面,但是需要去写别的东西,然后为了偷懒,开始尝试一次执行多条命令,毕竟两条命令搞不定,就一条命令完成,但是拼接也不是我们用那种&&了,这个函数有个独特地方就是...,它自带了一个执行多条命令功能,一条命令后面使用“;”就可以把命令隔开,看成是两条命令了,例如: stdin, stdout, stderr = ssh.exec_command('cd tmp;ls...EOF给结束掉,也就是将上面的代码包进来(向右滑动,查看更多) 这样直接把过滤文件方式已经自动输入密码给完成了,其实如果想要实现那些自动上传脚本,执行这些也是能完成,只要解决了两个解释器命令能够同一个脚本里面执行

    61630
    领券