可能重复:
osx/linux:管道分为两个进程?
有没有办法将输出从一个命令输入到另外两个命令的输入中,同时运行它们?
像这样的东西:
$ echo 'test' |(cat) |(cat)
test
test
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是我有一个程序从USB SDR设备接收FM无线电信号,并输出音频作为原始PCM数据(如.wav文件,但没有标题.)由于信号不是音乐但POCSAG寻呼机数据,我需要将其传输到解码器程序以恢复寻呼机文本.但是我也想听信号,所以我知道是否有任何数据进入.(否则我无法判断解码器是否损坏或者没有广播数据.)因此,除了将数据传输到寻呼机解码器之外,我还需要将相同的数据传输到play命令.
目前我只知道如何做一个 - 将其传输到解码器并静默读取数据,或将其传输到play并听到它而不会看到任何解码文本.
如何将相同的数据传输到两个命令,以便我可以阅读文本并听到音频?
我无法使用tee,因为它只将重复数据写入文件,但我需要实时处理数据.
我已经打了一下,与system()和system2()欢乐,我突然想到我能救输出或在对象退出状态.玩具示例:
X <- system("ping google.com",intern=TRUE)
Run Code Online (Sandbox Code Playgroud)
给我输出,而
X <- system2("ping", "google.com")
Run Code Online (Sandbox Code Playgroud)
给我退出状态(在这种情况下为1,谷歌不接受ping).如果我想要输出和退出状态,我必须进行2次系统调用,这看起来有点矫枉过正.如何只使用一个系统调用?
编辑:我想在控制台中同时使用两者,如果可能的话,不通过stdout="somefile.ext"在system2调用中使用临时文件并随后读取它.
我有一个脚本,用于自动同步各种远程 git 存储库。我试图用我的脚本做的一件事是从每个命令中捕获 stderr 的输出,并将所有这些错误写入一个文本文件,然后在脚本完成后通过电子邮件发送给我。这将提醒我需要解决的任何问题。不过,我在以下两行中遇到了问题:
{
git fetch --prune-tags github-fetch master
git push github master
} 2> '/tmp/stderr-contents-sync_git_repositories.txt'
Run Code Online (Sandbox Code Playgroud)
问题是该git fetch行正在将以下内容写入 stderr:
From https://github.com/XJDHDR/xjdhdr-random-code.wiki
* branch master -> FETCH_HEAD
13af304..333d602 master -> github/master
Run Code Online (Sandbox Code Playgroud)
这git pull条线是这样写的:
To ssh://github.com/XJDHDR/xjdhdr-random-code.wiki.git
333d602..da65970 master -> master
Run Code Online (Sandbox Code Playgroud)
我的问题是这些都不是错误,每次运行脚本时都会通过电子邮件发送。我想知道是否有可能阻止 git 将这些非错误写入 stderr 或从 stderr 输出中过滤出这些类型的消息,同时保留真正的错误。
我想在 bash 脚本中添加一个命令,将所有 stderr 和 stdout 定向到特定文件。从这个和许多其他来源,我知道我会从命令行使用:
/path/to/script.sh >> log_file 2>> err_file
Run Code Online (Sandbox Code Playgroud)
然而,我想要在我的脚本中添加一些类似于这些 slurm 标志的东西:
#!/bin/bash
#SBATCH -o slurm.stdout.txt # Standard output log
#SBATCH -e slurm.stderr.txt # Standard error log
<code>
Run Code Online (Sandbox Code Playgroud)
有没有办法在脚本内直接输出,或者我是否需要在>> log_file 2>> err_file每次调用脚本时使用?谢谢
在尝试存储 SSH 检查的输出以查看我是否具有对帐户的 SSH 访问权限时,我看到了奇怪的行为。我尝试了以下方法:
ssh git@bitbucket.org > temp.txt
Run Code Online (Sandbox Code Playgroud)
并且我希望收到一条字符串消息,告诉我权限是否被拒绝或不保存到temp.txt. 但输出直接到终端,而不是保存到文件。但是,如果我这样做
ls -l > temp.txt
Run Code Online (Sandbox Code Playgroud)
该输出保存到文件。什么可能导致这种行为差异?我最终将把输出保存到一个变量中,但在这种情况下也会看到类似的行为。我使用的是 Ubuntu 16.04 bash 版本 4.3.48(1)。
我正在尝试编写一个 bash 脚本,其中每个命令都通过一个使用以下行评估命令的函数:
eval $1 2>&1 >>~/max.log | tee --append ~/max.log
Run Code Online (Sandbox Code Playgroud)
它不起作用的一个例子是在尝试评估 cd 命令时:
eval cd /usr/local/src 2>&1 >>~/max.log | tee --append ~/max.log
Run Code Online (Sandbox Code Playgroud)
导致问题的部分是 | tee --append ~/max.log 部分。知道为什么我遇到问题吗?
我正在运行一个 python 脚本,用于pandas.read_csv导入 csv 文件。当 Pandas 没有看到预期的内容时,它会提供控制台警告,例如:
Skipping line 163: Expected 41 fields in line 163, saw 42
Run Code Online (Sandbox Code Playgroud)
我如何将其记录到文本文件中?
如果我从命令行运行脚本,python > logfile.txt则文件中仅显示 print 的输出,而不显示警告。
在shell中,我使用go run file > output,但只有fmt.Print被保存到输出中.所有log.Print仍然输出到屏幕!在我在互联网上搜索之后,我发现我可以设置日志的输出目录,但是如何在同一个文件中保存日志和文件?
git fetch命令的输出test1从以下cmd 重定向到“ ”文件:
manish@rigved:~$ git fetch --all --prune > test1
From https://github.com/Beawel/wwwnew
x [deleted] (none) -> origin/test
Run Code Online (Sandbox Code Playgroud)
问题:但是x [deleted] ...输出中显示的“ ”行未重定向到test1,为什么?请提出建议。
为什么git命令会在stderr上打印明显不是错误消息的内容?
manish@rigved:~$ cat test1
Fetching origin
Run Code Online (Sandbox Code Playgroud)