Questions tagged «io-redirection»

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

2
如何将命令的输出分配给shell变量?
我想将表达式的结果分配给变量并将其与字符串连接,然后回显它。这是我得到的: #!/bin/bash cd ~/Desktop; thefile= ls -t -U | grep -m 1 "Screen Shot"; echo "Most recent screenshot is: "$thefile; 但是输出: Screen Shot 2011-07-03 at 1.55.43 PM.png Most recent screenshot is: 因此,它似乎没有分配给$thefile,而是在执行时被打印。

10
如何使用grep标准错误流(stderr)?
我正在使用ffmpeg获取音频剪辑的元信息。但是我无法重复。 $ ffmpeg -i 01-Daemon.mp3 |grep -i Duration FFmpeg version SVN-r15261, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib --mandir=/usr/share/man --arch=i386 --extra-cflags=-O2 ... 我检查了一下,将此ffmpeg输出定向到stderr。 $ ffmpeg -i 01-Daemon.mp3 2> /dev/null 因此,我认为grep无法读取错误流以捕获匹配的行。我们如何启用grep读取错误流? 使用nixCraft链接,我将标准错误流重定向到标准输出流,然后grep工作了。 $ ffmpeg -i 01-Daemon.mp3 2>&1 | grep -i Duration Duration: 01:15:12.33, start: 0.000000, …

6
使用while循环SSH到多个服务器
我有一个文件servers.txt,其中包含服务器列表: server1.mydomain.com server2.mydomain.com server3.mydomain.com 当我逐行读取文件while并回显每一行时,所有文件均按预期工作。所有行均已打印。 $ while read HOST ; do echo $HOST ; done < servers.txt server1.mydomain.com server2.mydomain.com server3.mydomain.com 但是,当我要SSH到所有服务器并执行命令时,突然我的while循环停止工作: $ while read HOST ; do ssh $HOST "uname -a" ; done < servers.txt Linux server1 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux 这仅连接到列表中的第一台服务器,而不连接到所有服务器。我不明白这里发生了什么。有人可以解释一下吗? 这甚至更陌生,因为使用for循环可以正常工作: …

7
什么时候使用附加的文件描述符?
我知道您可以创建文件描述符并将输出重定向到它。例如 exec 3<> /tmp/foo # open fd 3. echo a >&3 # write to it exec 3>&- # close fd 3. 但是您可以在没有文件描述符的情况下执行相同的操作: FILE=/tmp/foo echo a > "$FILE" 我正在寻找一个很好的示例,说明何时需要使用附加的文件描述符。

4
我如何完全使对/ dev / null /的cronjob静音?
在我的Ubuntu-Desktop和debian服务器上,我有一个需要每分钟执行一次的脚本(该脚本调用我的在线在线Browsergame的分钟记录)。 问题在于,在debian派生产品上,cron /var/log/syslog每次执行时都会记录日志。我最终看到一遍又一遍地重复执行它的消息/var/log/syslog: Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1) 我知道,为了抑制程序的输出,我可以将其重定向到/dev/null,例如,隐藏程序中的所有错误和警告消息,可以在crontab中创建这样的一行 * * * * * root /usr/local/sbin/mycommand.sh > /dev/null 但是我想运行一个cronjob并确保所有生成的输出或错误都通过管道传递给NULL,因此它不会在syslog中生成任何消息,也不会生成任何电子邮件 编辑: 有一种解决方案可以通过更改更改将cron日志重定向到此处建议的单独日志中/etc/syslog.conf 但是缺点是,然后所有cronjobs的ALL输出都将被重定向。 我可以以某种方式仅将单个cronjob重定向到单独的日志文件吗?最好是在cron.hourly文件本身内部可配置。

8
如何使iconv用转换后的输出替换输入文件?
我有一个bash脚本,该脚本枚举目录中的每个* .php文件并将其应用于iconv它。这将在STDOUT中输出。 由于添加-o参数(根据我的经验)实际上可能在转换发生之前写入了一个空白文件,因此,如何调整脚本以进行转换,然后覆盖输入文件? for file in *.php do iconv -f cp1251 -t utf8 "$file" done

2
命令行:<<<代替<<
为什么命令md5sum &lt;&lt;&lt; 'ddd' (输出d6d88f2e50080b9602da53dac1102762 -:)正确,md5sum &lt;&lt; 'ddd'而不正确? 什么&lt;&lt;&lt;意思

1
使用/ bin / sh将stderr和stdout都重定向到/ dev / null
我已经试过各种办法都重定向stdout并stderr以/dev/null没有任何成功。我几乎一生都在奔波,这是我从来没有遇到过的问题,但是在BSD中,我一度陷入困境/bin/sh。 我尝试过的 if ls ./python* 2&gt; /dev/null; then echo found Python fi ...有效 如果没有Python,它将忽略ls的错误消息。但是,如果python.tgz存在的话,将输出如下所示的一行: # ./test.sh ./python-2.7.3p1.tgz 我试过了: if ls ./python* &amp;&gt; /dev/null; then echo found Python fi 和 if ls ./python* 2&gt;1 &gt; /dev/null; then echo found Python fi 和 if ls ./python* &gt; /dev/null; then echo found Python …

1
此命令如何合法?“> file1 <file2 cat”
假设file2已经存在,该命令 &gt; file1 &lt; file2 cat 似乎是复制的内容file2来file1。 但我无法理解这种结构。 我了解“什么都没有”指向file1(创建或删除其内容)。然后将的内容file2定向到file1。 为什么cat之后file2呢?如何知道cat file2操作数的顺序不正确?

5
如何运行涉及使用sudo重定向或管道传输的命令?
我正在尝试遵循我认为是使用sudo而不是root帐户的最佳实践。 我正在运行一个简单的concat文件操作,例如: sudo echo 'clock_hctosys="YES"' &gt;&gt; /etc/conf.d/hwclock 在以普通用户身份运行的“ &gt;&gt;”右侧,此操作失败。添加额外的sudo也会失败(预期的行为,因为通过管道传递给sudo命令而不是文件)。 例子仅此而已,但已在root帐户下进行了验证和测试。

2
如何将输出重定向与here-document和cat结合使用?
假设我有一个脚本,该脚本想通过管道传递到另一个命令或重定向到文件(sh示例使用管道)。假设我正在使用bash。 我可以使用echo: echo "touch somefile echo foo &gt; somefile" | sh 我也可以使用cat以下方法做几乎相同的事情: cat &lt;&lt; EOF touch somefile echo foo &gt; somefile EOF 但是,如果我将“ EOF”替换为“ EOF | sh”,它只是认为这是heredoc的一部分。 如何使它cat从stdin输出文本,然后将其通过管道传输到任意位置?


3
关闭文件描述符,>&-vs <&-
在我正在阅读的bash教程中,它说如果您打开文件描述符进行读取,即 exec 3&lt; echolist 然后您必须像这样关闭它 exec 3&lt;&amp;- 但是,如果打开文件描述符进行写入,则必须像这样关闭它: exec 3&gt;&amp;- 然而,当我在互联网上浏览时,我看到人们打开文件,然后用以下命令关闭文件: exec 3&gt;&amp;- 注意:根据教程,何时应使用exec 3&lt;&amp;1。 所以我的问题是,是否可以通过exec n&gt;&amp;-n是文件描述符编号来关闭所有文件描述符?不管它是开放供阅读,写作还是同时开放?

5
命令行程序可以防止其输出重定向吗?
我已经习惯了这样做: someprogram &gt;output.file 每当我要将程序生成的输出保存到文件时,都会执行此操作。我也知道此IO重定向的两个变体: someprogram 2&gt;output.of.stderr.file (对于stderr) someprogram &amp;&gt;output.stderr.and.stdout.file (对于stdout + stderr组合) 今天,我遇到了一个我认为不可能的情况。我使用以下命令,xinput test 10并且按预期,我将获得以下输出: user @ hostname:〜$ xinput测试10 按键30 密钥释放30 按键40 钥匙扣40 按键32 钥匙扣32 按键65 钥匙扣65 按键61 键释放61 按键31 ^ C 用户@主机名:〜$ 我希望可以像往常一样将此输出保存到文件中xinput test 10 &gt; output.file。但是,当与我的预期相反时,文件output.file仍然为空。这也是为了xinput test 10 &amp;&gt; output.file确保我不会错过stdout或stderr上的某些内容。 我真的很困惑,因此在这里问xinput程序是否可以避免其输出被重定向? 更新 我看了看资料。似乎此代码生成了输出(请参见下面的代码段)。在我看来,输出将由普通的printf生成 //在文件test.c中 静态无效print_events(Display * dpy) { …


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.