Questions tagged «io-redirection»

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

10
如何在文件中追加多行
我正在编写一个bash脚本来查找文件(如果不存在),然后创建该文件并将其附加到该文件: Host localhost ForwardAgent yes 因此,"line then new line 'tab' then text"我认为它是一种敏感格式。我知道您可以这样做: cat temp.txt >> data.txt 但自从两行开始,这似乎很奇怪。有没有办法以这种格式附加它: echo "hello" >> greetings.txt

3
Shell的控制和重定向运算符是什么?
我经常在网上看到教程,这些教程将各种命令与不同的符号相连。例如: command1 | command2 command1 & command2 command1 || command2 command1 && command2 其他人似乎正在将命令连接到文件: command1 > file1 command1 >> file1 这些是什么东西?他们叫什么?他们在做什么?还有更多吗? 有关此问题的元线程。。

9
如何在另一个bash会话中查看正在运行的进程的输出?
从本地工作开始,我就已经在远程计算机上运行了一个脚本。我可以以同一用户的身份通过SSH连接到计算机,并查看中运行的脚本ps。 $ ps aux | grep ipcheck myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh 它只是在本地会话上输出到stdout(我从./ipchecker.sh本地终端窗口运行,不重定向,不使用screen等)。 无论如何,SSH会话中是否可以查看此正在运行的命令的输出(而无需停止它)? 到目前为止,我发现最好的方法是使用它,strace -p 18386但是我在屏幕上飞走了成群的文本,其内容过于详尽。我可以停下来strace,然后在输出中进行筛选,然后找到将文本打印到stdout的内容,但它又长又令人困惑,很显然,在停止时我可能会错过一些东西。我想找到一种方法来实时查看脚本输出,就像在本地工作一样。 任何人都可以对此进行改进吗?显而易见的答案是通过重定向或在screen会话等中重新启动脚本,这不是关键任务脚本,因此我可以这样做。相反,我认为这是一个有趣的学习练习。


8
如何将stdout发送到多个命令?
我认为有些命令会过滤或作用于输入,然后将其作为输出传递给我stdout-但是有些命令只会接受stdin和并对其执行任何操作,而不会输出任何内容。 我对OS X最熟悉,因此立即想到的是pbcopy和pbpaste-这是两种访问系统剪贴板的方法。 无论如何,我知道如果我要输出stdout并把输出吐到两个stdout文件中,则可以使用tee命令。而且我对有所了解xargs,但我认为这不是我想要的。 我想知道如何stdout在两个(或多个)命令之间进行拆分。例如: cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors 可能有比该示例更好的示例,但是我真的很想知道如何将stdout发送到不中继该命令的命令,同时又避免stdout被“静音”-我不是在问如何对cat文件和grep部分并将其复制到剪贴板-具体命令不是那么重要。 另外-我不是在问如何将其发送到文件,并且stdout-这可能是一个“重复”的问题(对不起),但是我进行了一些查找,只能找到正在询问如何在stdout和文件之间进行拆分的类似问题。 -这些问题的答案似乎是tee,我认为这对我不起作用。 最后,您可能会问:“为什么不使pbcopy成为管道链中的最后一件事?” 我的回答是1)如果我想使用它并仍然在控制台中看到输出怎么办?2)如果我要使用两个stdout在处理输入后不输出的命令怎么办? 哦,还有一件事-我意识到我可以使用tee一个命名管道(mkfifo),但是我希望可以通过一种简洁的方式内联地完成此操作,而无需事先设置:)

2
查看systemd服务的stdout / stderr
我为自定义应用程序创建了一个简单的systemd服务文件。当我手动运行该应用程序时,它运行良好,但是当我使用systemd运行该应用程序时,我的CPU耗尽了。 我正在尝试找出问题所在,但不知道在哪里找到输出(或如何配置systemd将输出放置在某处)。 这是我的服务文件: [Unit] Description=Syncs files with a server when they change Wants=network.target After=network.target [Service] ExecStart=/usr/local/bin/filesync-client --port 2500 WorkingDirectory=/usr/local/lib/node_modules/filesync-client Restart=always [Install] WantedBy=multi-user.target 在整个应用程序中,我输出到stdout和stderr。 如何读取守护程序的输出? 编辑: 我发现了man systemd.exec,其中提到了该StandardOutput=选项,但是我不确定如何使用它。从手册页: StandardOutput= 控制已执行进程的文件描述符1(STDOUT)连接到的位置。采取以下之一:继承,null,tty,syslog,kmsg,kmsg + console,syslog + console或socket。 如果设置为继承,则将标准输入的文件描述符复制为标准输出。如果设置为null,则标准输出将连接到/dev/null,即写入其中的所有内容都将丢失。如果设置为tty,则标准输出将连接到tty(通过进行配置TTYPath=,请参见下文)。如果使用TTY输出,则仅执行的过程将不会成为终端的控制过程,也不会失败或等待其他过程释放终端。 syslog将标准输出连接到syslog(3)系统记录器。 kmsg将其与内核日志缓冲区连接,该缓冲区可通过dmesg(1)访问。 syslog +控制台和kmsg +控制台工作类似,但也将输出复制到系统控制台。 socket通过套接字激活将标准输出连接到套接字,其语义类似于的相应选项StandardInput=。此设置默认为继承。 这是否意味着这些是我唯一的选择?例如,我想输入输出内容/dev/shm。我想我可以使用Unix域套接字并编写一个简单的侦听器,但这似乎有点不必要。 我只需要使用它进行调试,最终可能会删除大多数日志并将输出更改为syslog。

1
Bash:“> |”是做什么的?
我刚刚看到了这个记录。 $ some-command >| /tmp/output.txt 垂直管道用于标准重定向中,将一个命令的输出“管道化”到另一个命令>|,实际上完全没有用,因为与>在这种情况下一样?

7
如何将wget的输出作为输入重定向到解压缩?
我必须从此链接下载文件。下载的文件是一个zip文件,我必须将其解压缩到当前文件夹中。 通常,我会先下载它,然后运行unzip命令。 $ wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip $ unzip temp.zip 但是通过这种方式,我需要执行两个命令,等待第一个命令完成才能执行下一个命令,而且,我必须知道temp.zip要赋予它的文件名unzip。 是否可以将输出重定向wget到unzip?就像是 $ unzip < `wget http://www.vim.org/scripts/download_script.php?src_id=11834` 但这没有用。 bash wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip::歧义重定向 另外,wget执行了两次,并下载了两次文件。

7
将stdout重定向到您没有写权限的文件
当您尝试修改文件而没有写权限时,会出现错误: > touch /tmp/foo && sudo chown root /tmp/foo > echo test > /tmp/foo zsh: permission denied: /tmp/foo Sudoing无济于事,因为它以root身份运行命令,但是shell仍会处理重定向标准输出并以您自己的方式打开文件: > sudo echo test > /tmp/foo zsh: permission denied: /tmp/foo 除了以root用户身份打开Shell并以这种方式操作文件之外,是否有一种简单的方法可以将stdout重定向到您没有写入权限的文件? > sudo su # echo test > /tmp/foo

1
是否有办法将nohup输出重定向到nohup.out以外的日志文件?
我经常使用该程序,nohup以便我的进程不受挂断的影响。因此,如果我想使程序program不受挂断的困扰,请使用以下命令 nohup program & 其中,&并将其进程在后台运行。 开始时,nohup给我消息: nohup:将输出附加到`nohup.out' 除了以外,还有什么方法可以将输出发送到文件nohup.out吗?通常,我想使用来在同一目录中运行许多进程nohup,但是如果执行此操作,则所有输出都将集中到一个nohup.out文件中。 手册页(例如here)似乎没有指定日志文件的选项。你能确认一下吗?另外,您是否对我如何解决此问题有任何想法?

2
如何将输出从cron重定向到文件?
我有一个备份脚本,需要在一天的特定时间运行,因此我正在cron执行此任务,并且在cron中,我还尝试将备份脚本的输出重定向到logfile。 crontab -e */1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log 在上面的cron条目中,我都将两者都重定向stderr and stdout到日志文件。 上面的cron作业可以很好地执行,syslog 并且可以执行backup.sh文件中提到的任务,但不会向日志文件写入任何内容。 /var/log/syslog Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log) 当我从cli运行脚本时,它会按要求运行,并且输出将写入日志文件 ranveer@ranveer:~$ ./backup.sh &>> backup.log ranveer@ranveer:~$ cat backup.log Fri Oct 19 20:28:01 IST 2012 successfully copied testdir test.txt successfully copied ------------------------------------------------------------------------------------- ranveer@ranveer:~$ 因此,为什么文件输出没有从cron中重定向到文件。

4
cat file |有什么区别?./binary”和“ ./binary <文件”?
我有一个二进制文件(无法修改),可以这样做: ./binary &lt; file 我也可以: ./binary &lt;&lt; EOF &gt; "line 1 of file" &gt; "line 2 of file" ... &gt; "last line of file" &gt; EOF 但 cat file | ./binary 给我一个错误。我不知道为什么它不适用于管道。在所有3种情况下,文件的内容均以二进制的标准输入(以不同方式)提供: bash读取文件并将其提供给二进制的 stdin bash从stdin读取行(直到EOF)并将其提供给binary的 stdin cat读取文件行并将其放入stdout,bash将其重定向到二进制的 stdin 据我所知,二进制文件不会注意到这3个文件之间的区别。有人可以解释为什么第三种情况不起作用吗? 顺便说一句:二进制给出的错误是: 20170116 / 125624.689-U3000011无法读取脚本文件'',错误代码'14'。 但是我的主要问题是,具有这三个选项的任何程序有什么区别? 以下是一些详细信息:我使用strace再次尝试了该 方法,实际上在出现错误消息之前,有来自lseek的ESPIPE(非法查找)错误, 接着是来自读取的EFAULT(错误地址)错误。 我试着用Ruby脚本(不使用临时文件)来控制二进制是部分callapi从为Automic(UC4) 。

5
工艺替代和管道
我想知道如何理解以下内容: 将命令的标准输出插入另一个命令的标准输入是一项强大的技术。但是,如果您需要传递多个命令的标准输出怎么办?这是过程替代的地方。 换句话说,过程替换可以执行管道的任何操作吗? 进程替换可以做什么,而管道不能做什么?


6
如何创建类似/ dev / null的“ blackhole”目录?
我想创建一个“ /dev/null”目录(或“黑洞”目录),以便写入其中的任何文件都不是真正写入的,而只是消失了。 我有一个将大型临时文件写到目录中的应用程序。我无法控制文件名,而且我也不在乎这些文件的内容。我可以编写一个脚本来定期清除这些文件,但是文件很快被写出并填满了我的磁盘。我正在寻找更聪明的东西。我希望应用程序“认为”它正在写出这些文件,而实际上,写操作只是在另一端被丢弃。 另请参阅此旧的相关线程。

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.