相关疑难解决方法(0)

如何将标准输出发送到多个命令?

有一些命令可以过滤或作用于输入,然后将其作为输出传递,我认为通常是stdout- 但有些命令只会接受stdin并执行它们对它所做的任何事情,并且不输出任何内容。

我最熟悉 OS X,因此我立即想到了两个pbcopypbpaste- 它们是访问系统剪贴板的方法。

无论如何,我知道如果我想使用 stdout 并将输出输出到两个stdout文件和一个文件,那么我可以使用该tee命令。我对 有一点了解xargs,但我认为这不是我要找的。

我想知道如何拆分stdout以在两个(或多个)命令之间切换。例如:

cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
Run Code Online (Sandbox Code Playgroud)

可能有一个比那个更好的例子,但我真的很想知道如何将标准输出发送到一个不中继它的命令,同时避免stdout被“静音” - 我不是问如何cat归档和grep它的一部分并将其复制到剪贴板 - 具体命令并不那么重要。

另外 - 我不是在问如何将它发送到文件,而且stdout- 这可能是一个“重复”的问题(抱歉),但我做了一些查找,只能找到类似的询问如何在标准输出和文件之间拆分的问题- 这些问题的答案似乎是tee,我认为这对我不起作用。

最后,你可能会问“为什么不让 pbcopy 成为管道链中的最后一件事?” 我的回答是 1) 如果我想使用它并且仍然在控制台中看到输出怎么办?2)如果我想使用两个stdout在处理输入后不输出的命令怎么办?

哦,还有一件事 - 我意识到我可以使用tee一个命名管道(mkfifo),但我希望有一种方法可以简洁地内联完成,无需事先设置:)

command-line shell io-redirection

245
推荐指数
7
解决办法
17万
查看次数

POSIX 究竟是什么?

我经常看到到处都提到 POSIX,我认为它是 UNIX 的基线标准……直到我在维基百科页面上注意到以下摘录:The Open Group

由The Open Group是最有名的认证机构为UNIX商标,其公布统一UNIX规范技术标准它扩展了POSIX标准,是UNIX系统的官方定义

如果 UNIX 系统的官方定义是 POSIX 的扩展,那么 POSIX 到底是什么?,,, 它确实似乎是 UNIX 世界的试金石,但我不知道它是如何融入全局的。

standard posix

152
推荐指数
4
解决办法
5万
查看次数

使用管道馈送源命令

以前我使用过这样的source命令:

source file_name
Run Code Online (Sandbox Code Playgroud)

但我想要做的是:

echo something | source
Run Code Online (Sandbox Code Playgroud)

哪个不起作用。

shell pipe

34
推荐指数
2
解决办法
1万
查看次数

bash '<(file contents)' 语法是什么?

Security StackExchange 上的这个答案使用有趣的 bash 语法来生成内联文件:

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650
Run Code Online (Sandbox Code Playgroud)

这一点特别有趣:

<(openssl ecparam -name secp384r1)
Run Code Online (Sandbox Code Playgroud)

运行只是:

echo <(openssl ecparam -name secp384r1)
Run Code Online (Sandbox Code Playgroud)

我回来了 /dev/fd/63

所以这似乎用文件的内容创建了一个临时文件描述符。

这个叫什么?

bash file-descriptors

25
推荐指数
1
解决办法
1660
查看次数

如何在 sh 中并排列中打​​印多行变量?

这个问题基于Ask\xe2\x80\xafUbuntu 上的 \xc2\xa0similar 问题,\n但不是bash,我\xc2\xa0 希望在 中获得类似的输出sh

\n

bash 中没有问题;它按预期工作。

\n
wolf@linux:~$ echo $SHELL\n/usr/bin/bash\nwolf@linux:~$ \nwolf@linux:~$ varA=\'Aug 01\n> Aug 16\n> Aug 26\'\nwolf@linux:~$ \nwolf@linux:~$ varB=\'04:25\n> 03:39\n> 10:06\'\nwolf@linux:~$ \nwolf@linux:~$ echo "$varA $varB"\nAug 01\nAug 16\nAug 26 04:25\n03:39\n10:06\nwolf@linux:~$\nwolf@linux:~$ paste <(printf %s "$varA") <(printf %s "$varB")\nAug 01  04:25\nAug 16  03:39\nAug 26  10:06\nwolf@linux:~$\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我在 中尝试类似的命令时sh,我收到以下错误。

\n
wolf@linux:~$ sh\n$ \n$ varA=\'Aug 01\n> Aug 16\n> Aug 26\'\n\n$ varB=\'04:25\n> 03:39\n> 10:06\'\n$ \n$ echo "$varA $varB"\nAug 01\nAug 16\nAug 26 04:25\n03:39\n10:06\n$ \n$ paste <(printf …
Run Code Online (Sandbox Code Playgroud)

shell bash text-processing columns paste

6
推荐指数
1
解决办法
2650
查看次数

使用 POSIX 连接两个未排序的文件?

由于必须对输入join进行排序,因此该命令的调用方式通常类似于:

join <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)

这是不可移植的,因为它使用了 POSIX 未指定的进程替换。

join-还可以通过指定为文件参数之一来使用标准输入。但是,这仅允许通过管道对其中一个文件进行排序:

sort file1 | join - <(sort file2)
Run Code Online (Sandbox Code Playgroud)

似乎应该有一种简单的方法来完成对两个文件的排序,然后仅使用 POSIX 指定的功能连接结果。也许使用重定向到第三个文件描述符,或者可能需要创建一个 FIFO。然而,我很难想象它。

如何join在未排序的文件上使用 POSIXly?

io-redirection sort posix process-substitution join

3
推荐指数
1
解决办法
723
查看次数