相关疑难解决方法(0)

/dev/stdin、/dev/stdout 和 /dev/stderr 的可移植性如何?

有时,我需要指定标准 IO 流 ( stdin, stdout, stderr)之一的“等效路径” 。因为我 99% 的时间都在使用 Linux,所以我只是/dev/在准备 get/dev/stdin等,而这“似乎做对了”。但是,一方面,我一直对这样的理由感到不安(因为,当然,“它似乎有效”,直到它没有为止)。此外,我对这种操作的便携性没有很好的了解。

所以我有几个问题:

  1. 在Linux中的情况下,它是安全(是/否)划上等号stdinstdout以及stderr/dev/stdin/dev/stdout/dev/stderr

  2. 更一般地说,这个等价物是否“足够便携”?

我找不到任何 POSIX 参考。

io file-descriptors posix portability

69
推荐指数
4
解决办法
2万
查看次数

文件描述符链接的可移植性

我一直想知道这一点,但从来没有花时间去了解,所以我现在就这样做 -此处显示/proc/$$/fd/$N或的用法有多便携/dev/fd/$N?我理解POSIX 保证 /dev/null, /dev/tty, and /dev/console (尽管我前几天在阅读了这个答案的评论后才发现这一点但是其他的呢?

据我所知,它们很常见,但我不能指望在哪些系统中找到它们?为什么不?找到一个比另一个更有可能吗?他们会总是表现出类似的属性吗?

我倾向于以各种方式广泛使用这些设备,我想知道是否有机会尝试一下。

此外,上述问题应该被理解为只是我我想知道的,但是,因为我显然首先要问,所以我在这方面可能不是最了解的,它们不应该被视为严格的要求一个答案。如果可以,请告诉我。

process file-descriptors open-files proc portability

23
推荐指数
2
解决办法
4431
查看次数

如何将命令输出直接插入到文件中的模式之前?

这个问题及其答案显示现有文件(“processedFile”)的内容可以在其模式之一之前插入到另一个现有文件(“receivingFile”)中,这样:

sed -i -e '/pattern/r processedFile' receivingFile
Run Code Online (Sandbox Code Playgroud)

有时,此类内容可能来自先前的命令单元,并且尚未写入。

那时,是否可以将命令单元的结果插入到receiveFile中而不创建/写入processedFile?

例子:

比如说,我们预处理someFile如下(从第4行开始读取其内容到文件末尾):

awk 'NR>3' someFile
Run Code Online (Sandbox Code Playgroud)

现在,无需将其写入新文件,我们希望将其直接插入到receivingFile中的模式之前,例如:

awk 'NR>3' someFile | <insertion commands>
Run Code Online (Sandbox Code Playgroud)

PS:最好使用awksed


根据@RomanPerekhrest 的请求,

一些文件

# random output
# random
11
0 0 0 23.259058 2.1756592 -1.2097659 -0.074128056 0.34343502 -0.017659865
0 0 0.05 51.091269 4.8520157 -0.0011590485 0.00096592555 0.0059719715 -0.050598505
Run Code Online (Sandbox Code Playgroud)

预处理:

awk 'NR>3' someFile:

0 0 0 23.259058 2.1756592 -1.2097659 -0.074128056 0.34343502 -0.017659865
0 0 0.05 51.091269 …
Run Code Online (Sandbox Code Playgroud)

shell sed awk text-processing

5
推荐指数
1
解决办法
1510
查看次数