Questions tagged «io-redirection»

I / O重定向用于Shell脚本。此功能使一个人可以获取命令的输出并将其重定向为另一条命令的输入,或者命令可以从文件而不是标准输入流或终端获取输入。整个过程有助于以各种方式连接数据流。

3
使用exec重定向所有后续命令的stderr
我有一个bash文件,我需要将所有输出重定向到一个文件,调试日志以及终端。我需要将stdout和stderr都重定向到调试,并在脚本中将其记录为所有命令。 我不想为2>&1 | tee -a $DEBUG文件中的每个命令添加内容。我可以忍受| tee -a $DEBUG。 我记得有一种方法可以这样做exec 2>&1。 目前,我正在使用类似以下内容的东西: #!/bin/bash DEBUGLOG=/tmp/debug exec 2>&1 somecommand | tee -a $DEBUGLOG somecommand2 | tee -a $DEBUGLOG somecommand3 | tee -a $DEBUGLOG 但它不起作用。有没有人有解决方案/可以解释原因?

2
cat <> file`如何工作?
cat &lt; file将文件的内容打印到stdout。 cat &gt; file读取标准输入,直到检测到Ctrl+ D并将输入文本写入文件。 cat &lt;&gt; file,至少在我的Bash版本中,愉快地打印文件的内容(无错误),但不修改文件,也不更新修改时间戳。 Bash标准如何证明&gt;在第三条陈述中似乎被忽略的理由?更重要的是,它在做什么?

5
将文件的内容重定向到命令“ echo”
我有一个名为my_file.txt的文件,其内容只是字符串Hello。如何将其内容重定向到命令echo? 我知道我有命令less,cat,more...但我需要做它用echo。 我尝试了这个: $ cat my_file.txt | echo 还有这个: $ echo &lt; my_file.txt 但是在两种情况下,它在标准输出中仅显示为空白,而my_file.txt的内容中则没有。 我该怎么办?

4
/ dev / tcp监听而不是nc监听
使用netcat侦听器,例如: nc -l &lt;port&gt; &lt; ~/.bashrc 我可以使用以下方法在新计算机(没有ncLDAP或没有LDAP)上获取.bashrc : cat &lt; /dev/tcp/&lt;ip&gt;/&lt;port&gt; &gt; ~/.bashrc 我的问题是:有没有一种方法可以nc -l &lt;port&gt;在我的第一行中使用/ dev / tcp而不是模仿它的功能nc? 我正在使用的计算机是非常坚固的实验室/沙盒环境RHEL(没有ssh,没有nc,没有LDAP,没有yum,我无法安装新软件,并且它们没有连接到Internet)


7
将一个文件重定向到另一个文件是UUOC(对cat的无用使用)吗?
如果我想使内容file2与的内容匹配file1,我显然可以运行cp file1 file2。 但是,如果我想保留一切有关file2 除了内容所有者,权限,扩展属性,ACL的,硬链接,等等等等,那么我就不会想运行cp。*在这种情况下,我只是想在扑通内容file1成file2。 似乎可以做到以下几点: &lt; file1 &gt; file2 但这是行不通的。 file2被截断为空且未写入。然而, cat &lt; file1 &gt; file2 确实有效。 令我惊讶的是第一个版本不起作用。 第二个版本是UUOC吗?有没有一种方法,仅通过使用重定向就可以在不调用命令的情况下做到这一点? 注意:我知道UUOC不仅仅是真正的反模式,更是一个学问点。 * 如tniles09发现的,实际上在这种情况下cp 将起作用。

4
用bash读取文件中的行:for vs. while
我正在尝试读取文本文件,并使用bash脚本对每一行进行处理。 因此,我有一个看起来像这样的列表: server1 server2 server3 server4 我以为可以使用while循环来遍历,就像这样: while read server; do ssh $server "uname -a" done &lt; /home/kenny/list_of_servers.txt while循环在运行1次后停止,因此仅uname -a在server1上运行 但是,使用cat的for循环可以正常工作: for server in $(cat /home/kenny/list_of_servers.txt) ; do ssh $server "uname -a" done 更让我感到困惑的是,这也行得通: while read server; do echo $server done &lt; /home/kenny/list_of_servers.txt 为什么我的第一个示例在第一次迭代后停止?


3
sed可以将其输出保存到文件吗?
&gt; 可以做到。 echo "text" &gt; file tee 可以做到。 echo "test" | tee file 可以sed不使用上述任何一种方法来做到吗?是否可以在sed不使用&gt;或的情况下将命令的输出保存到文件中tee?


7
如何判断命令或Shell脚本的输出是stdout还是stderr
假设我运行一个命令或shell脚本,它给了我输出。在不知道此命令或Shell脚本的内部信息的情况下,如何确定输出是来自stderr还是stdout? 例如 $ ls -ld / drwxrwxr-t 35 root admin 1258 Dec 11 19:16 / 与 ls -ld /test ls: /test: No such file or directory 我如何确定第一个命令是打印到stdout第二个命令stderr(是吗?)?

2
“ <<(...)”重定向是什么意思?
我已经看到使用以下命令安装了rvm(红宝石版本管理器): bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) 因此,据我了解,我们获得了脚本内容并将其传递给bash(我相信&lt; &lt;并且&lt;&lt;是同一回事?),我对该&lt; &lt;部分感兴趣,可以在网上找到以下说明: &lt;&lt; 令牌意味着将当前输入流用作程序的STDIN,直到看到令牌为止。 这对我来说还不清楚,有人可以用更简单的方式举例或说明吗?

1
文件描述符和Shell脚本
我很难理解一个人如何在shell脚本中使用文件描述符。 我知道诸如 exec 5 &gt; /tmp/foo 因此,将fd 5附加到foo进行编写。 exec 6 &lt; /tmp/bar ...阅读。 exec 5&gt;&amp;- …关闭fd。 现在这是做什么的? #!/bin/bash exec 5 &gt; /tmp/foo exec 6 &lt; /tmp/bar cat &lt;&amp;6 | while read a do echo $a &gt;&amp;5 done 据我了解,&amp;5关闭FD,那么每次调用后输出仍如何成功重定向? 这是来自的复制面食:这里 它声称通过简单的echo $a &gt; file方法使用它会使其更快,但是我无法理解。我将不胜感激任何链接到体面的教程。我用google的功能似乎使我失望。

2
如何区分文件并从命令输出?
通常您会写: diff file1 file2 但是我想比较一个文件并从命令中输出(这里我使命令变得微不足道): diff file1 &lt;(cat file2 | sort) 好的,当我在shell提示符下手动输入此命令时,此工作有效,但是当我在shell脚本中放入完全相同的行,然后运行该脚本时,出现错误。 因此,问题是-如何正确执行此操作? 当然,我想避免将输出写入临时文件。

1
SSH导致while循环停止
我终于设法解决了我几个星期一直在努力的问题。我使用带有“授权密钥”的SSH来远程运行命令。一切都很好,除非我在while循环中这样做。使用ssh命令完成任何迭代后,循环终止。 很长时间以来,我认为这是某种ksh怪异的现象,但现在我发现bash的确具有相同的表现。 一个小示例程序来重现该问题。这是从一个较大的实现中提取的,该实现拍摄快照并在群集中的节点之间复制快照。 #!/bin/bash set -x IDTAG=".*zone" MARKER="mark-$(date +%Y.%m.%d.%H.%M.%S)" REMOTE_HOST=sol10-target ZFSPARENT=rpool ssh $REMOTE_HOST zfs list -t filesystem -rHo name,mounted $ZFSPARENT | grep "/$IDTAG " &gt; /tmp/actionlist #for RMT_FILESYSTEM in $(cat /tmp/actionlist) cat /tmp/actionlist | while read RMT_FILESYSTEM ISMOUNTED do echo ${RMT_FILESYSTEM}@${MARKER} [ "$ISMOUNTED" = "yes" ] &amp;&amp; ssh $REMOTE_HOST zfs …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.