标签: pipe

从管道中将值读入shell变量

我试图让bash处理来自stdin的数据,但是没有运气.我的意思是以下工作:

echo "hello world" | test=($(< /dev/stdin)); echo test=$test
test=

echo "hello world" | read test; echo test=$test
test=

echo "hello world" | test=`cat`; echo test=$test
test=
Run Code Online (Sandbox Code Playgroud)

我想要输出的地方test=hello world.我试过把""引号括起来"$test"也不起作用.

linux bash pipe

193
推荐指数
12
解决办法
30万
查看次数

如何在shell管道中使用`jq`?

我似乎无法jq在shell管道中"正常"行事.例如:

$ curl -s https://api.github.com/users/octocat/repos | jq | cat
Run Code Online (Sandbox Code Playgroud)

结果在jq简单的打印出它的帮助文本*.如果我尝试将jq输出重定向到文件,会发生同样的事情:

$ curl -s https://api.github.com/users/octocat/repos | jq > /tmp/stuff.json
Run Code Online (Sandbox Code Playgroud)

jq如果它确定它不是从tty运行的话,是故意拯救?如何防止此行为以便我可以jq在管道中使用?


*(我意识到这个例子包含了无用用途 ;它仅用于说明目的)

shell pipe jq

185
推荐指数
2
解决办法
7万
查看次数

管道命令输出到tee但也保存命令的退出代码

我有一个shell脚本,我在其中包装一个命令(mvn clean install),将输出重定向到日志文件.

#!/bin/bash
...
mvn clean install $@ | tee $logfile
echo $? # Does not show the return code of mvn clean install
Run Code Online (Sandbox Code Playgroud)

现在,如果mvn clean install失败并出现错误,我希望我的包装器shell脚本也会因该错误而失败.但是因为我将所有输出都传递给tee,所以我无法访问返回代码mvn clean install,所以当我$?之后访问时,它总是0(因为tee成功).

我尝试让命令将错误输出写入单独的文件并在之后检查,但mvn的错误输出始终为空(看起来它只写入stdout).

如何保留返回代码mvn clean install但仍然将输出传递给日志文件?

bash shell pipe sh tee

150
推荐指数
3
解决办法
5万
查看次数

欺骗应用程序认为它的标准输出是一个终端,而不是管道

我正试图做相反的事情

检测stdin是终端还是管道?

我正在运行一个正在更改其输出格式的应用程序,因为它检测到stdout上的管道,我希望它认为它是一个交互式终端,以便在重定向时获得相同的输出.

我当时认为将它包装在expect脚本中或使用proc_open()PHP中的它会这样做,但事实并非如此.

有什么想法吗?

bash terminal stdin pipe

137
推荐指数
7
解决办法
5万
查看次数

管道grep到grep后保留着色

在grep'ing之后Preserve ls着色中有一个类似的问题,但是如果你把彩色的grep输出管道输入另一个grep,颜色不会被保留,那就烦人了.

例如grep --color WORD * | grep -v AVOID,不保留第一个输出的颜色.但对我来说ls | grep FILE,保持颜色,为什么差异?

linux bash grep pipe colors

133
推荐指数
4
解决办法
3万
查看次数

多处理 - 管道与队列

Python的多处理包中队列和管道之间的根本区别是什么?

在什么情况下应该选择一个而不是另一个?什么时候使用有利Pipe()?什么时候使用有利Queue()

python queue performance pipe multiprocessing

128
推荐指数
3
解决办法
6万
查看次数

什么是命名管道?

它们是什么以及它们如何工作?

上下文恰好是SQL Server

sql-server pipe named-pipes

125
推荐指数
8
解决办法
17万
查看次数

使用bash,如何将标准错误传递到另一个进程?

众所周知如何将流程的标准输出管道传输到另一个流程标准输入:

proc1 | proc2
Run Code Online (Sandbox Code Playgroud)

但是如果我想将proc1的标准错误发送到proc2并将标准输出保留到当前位置呢?你会认为bash会有一个命令:

proc1 2| proc2
Run Code Online (Sandbox Code Playgroud)

但是,唉,没有.有没有办法做到这一点?

bash pipe stderr

124
推荐指数
4
解决办法
6万
查看次数

如何打开文件夹中的每个文件?

我有一个python脚本parse.py,它在脚本中打开一个文件,比如file1,然后做一些事情可能会打印出总字符数.

filename = 'file1'
f = open(filename, 'r')
content = f.read()
print filename, len(content)
Run Code Online (Sandbox Code Playgroud)

现在,我使用stdout将结果定向到我的输出文件 - 输出

python parse.py >> output
Run Code Online (Sandbox Code Playgroud)

但是,我不想手动执行此文件,有没有办法自动处理每个文件?喜欢

ls | awk '{print}' | python parse.py >> output 
Run Code Online (Sandbox Code Playgroud)

那么问题是如何从standardin读取文件名?或者已经有一些内置函数可以轻松完成ls和那些工作?

谢谢!

python stdin stdout file pipe

124
推荐指数
4
解决办法
34万
查看次数

用于管道heredoc的多行语法; 这便携式吗?

我熟悉这种语法:

cmd1 << EOF | cmd2
text
EOF
Run Code Online (Sandbox Code Playgroud)

但刚刚发现bash允许我写:

cmd1 << EOF |
text
EOF
cmd2
Run Code Online (Sandbox Code Playgroud)

(heredoc用作cmd1的输入,cmd1的输出用于cmd2).这似乎是一个非常奇怪的语法.它是便携式的吗?

bash shell pipe heredoc sh

122
推荐指数
4
解决办法
3万
查看次数

标签 统计

pipe ×10

bash ×6

shell ×3

linux ×2

python ×2

sh ×2

stdin ×2

colors ×1

file ×1

grep ×1

heredoc ×1

jq ×1

multiprocessing ×1

named-pipes ×1

performance ×1

queue ×1

sql-server ×1

stderr ×1

stdout ×1

tee ×1

terminal ×1