在bash中考虑我做了这个愚蠢的事情:
$ exec 1>&-
$ exec 2>&-
Run Code Online (Sandbox Code Playgroud)
我相信我还没有输掉比赛(哎呀其实我输掉了比赛)我可以重新连接到标准杆.这个想法是我不知道怎么做.
我尝试的第一件事是创建一个fifo并使用另一个shell来监视第一个shell的stdout.它不起作用,我不知道为什么:
$ mkfifo stdout
$ exec 1>stdout
$ echo "Hello stdout"
Run Code Online (Sandbox Code Playgroud)
$ tail -f stdout
$ # nothing here
Run Code Online (Sandbox Code Playgroud)
我怎样才能重新连接我的合
STDOUT和STDERR后呢?
我知道解决方法是在玩之前保存STDOUT:
$ exec 3>&1
$ exec 1>&-
$ echo "Nothing will see this"
$ exec 1<&3 # Restoring stdout
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu机器上运行它,所以我不确定它是否适用于你,但这就是我所做的:
$ exec 1>&0
$ exec 2>&0
Run Code Online (Sandbox Code Playgroud)
突然,我重新连接了STDOUT和STDERR.魔法!
说明:运行以下命令,我们得到以下输出:
$ ls -l /dev/stdout
lrwxrwxrwx 1 root root 15 Jun 11 23:39 /dev/stdout -> /proc/self/fd/1
$ ls -l /proc/self/fd/1
lrwx------ 1 jay jay 64 Jun 22 01:34 /proc/self/fd/1 -> /dev/pts/10
$ ls -l /proc/self/fd/
total 0
lrwx------ 1 jay jay 64 Jun 22 01:35 0 -> /dev/pts/10
lrwx------ 1 jay jay 64 Jun 22 01:35 1 -> /dev/pts/10
lrwx------ 1 jay jay 64 Jun 22 01:35 2 -> /dev/pts/10
lr-x------ 1 jay jay 64 Jun 22 01:35 3 -> /proc/12224/fd
Run Code Online (Sandbox Code Playgroud)
由于三个FD的指向同样的事情,我们可以只需指向到/ dev回报他们回到正常/ PTS/10将exec 1>&0和exec 2>&0做
最简单的方法,因为你还没有关闭stdin,它也连接到你的终端:
exec 2>&0 1>&0
Run Code Online (Sandbox Code Playgroud)
你也可以使用/dev/tty:
exec 2>/dev/tty 1>&2
Run Code Online (Sandbox Code Playgroud)
你要做的是盲目的,因为stderr在这里bash回声您键入的内容,如果没有stderr,就不能呼应.
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |