相关疑难解决方法(0)

你什么时候会使用额外的文件描述符?

我知道您可以创建一个文件描述符并将输出重定向到它。例如

exec 3<> /tmp/foo # open fd 3.
echo a >&3 # write to it
exec 3>&- # close fd 3.
Run Code Online (Sandbox Code Playgroud)

但是你可以在没有文件描述符的情况下做同样的事情:

FILE=/tmp/foo
echo a > "$FILE"
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个很好的例子,说明何时必须使用额外的文件描述符。

shell bash io-redirection file-descriptors

93
推荐指数
5
解决办法
6万
查看次数

重定向顺序

我不太明白计算机是如何读取这个命令的。

cat file1 file2 1> file.txt 2>&1

如果我理解,2>&1只需将标准错误重定向到标准输出。

按照这种逻辑,该命令对我来说如下:

  1. 连接文件file1file2.

  2. stdout从此操作发送到file.txt.

  3. 发送stderrstdout.

  4. 结尾?

我不确定电脑在做什么。按照我的逻辑,命令应该是

cat file1 file2 2>&1 > file.txt

但这不正确。

command-line shell bash io-redirection file-descriptors

53
推荐指数
3
解决办法
7964
查看次数

文件描述符和 shell 脚本

我很难理解如何在 shell 脚本中使用文件描述符。

我知道基础知识,例如

exec 5 > /tmp/foo
Run Code Online (Sandbox Code Playgroud)

所以 fd 5 附加到 foo 用于写入。

exec 6 < /tmp/bar
Run Code Online (Sandbox Code Playgroud)

……阅读。

exec 5>&-
Run Code Online (Sandbox Code Playgroud)

...关闭fd。

这有什么作用呢?

#!/bin/bash

exec 5 > /tmp/foo 
exec 6 < /tmp/bar 

cat <&6 | while read a
do
     echo $a >&5
done
Run Code Online (Sandbox Code Playgroud)

据我所知,&5关闭了 fd,那么每次调用后输出仍然如何成功重定向?

这是复制意大利面来自:这里

它声称在简单的echo $a > file情况下使用它会使其更快,但我无法理解。我将不胜感激任何指向体面教程的链接。我的谷歌权力似乎让我失望。

bash io-redirection shell-script file-descriptors

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

unix/Linux 中的 &gt;&gt; 符号和 &gt;&amp; 是什么?

我有一个 CRONTAB 条目,如下所示。有人能告诉我下面的语句到底在做什么吗?

1 0 * * * /vol01/sites/provisioning/MNMS/45627/45627.sh1 >> /vol01/sites/provisioning/MNMS/45627/output/cron.log 2>&1
Run Code Online (Sandbox Code Playgroud)

shell-script

33
推荐指数
2
解决办法
19万
查看次数

重定向标准输出和标准错误

我一直在试图弄清楚文件描述符之间的关系。我不明白的一件事是,如何:

ls -l /bin/usr > ls-output.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

不同于:

ls -l /bin/usr 2>&1 >ls-output.txt
Run Code Online (Sandbox Code Playgroud)

io-redirection stdout stderr

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