Reopen STDOUT and STDERR after closing them?

In bash, I think I did this stupid thing:

$ exec 1>&- $ exec 2>&- 

I am sure that I have not lost the game (in fact, I lost The Game ), and I can connect to stdout again. I think I don’t know how to do this.

The first thing I tried was to create fifo and use another shell to monitor the stdout of the first shell. This did not work, I do not know why:

tty1

 $ mkfifo stdout $ exec 1>stdout $ echo "Hello stdout" 

tty2

 $ tail -f stdout $ # nothing here 

How can I reconnect my private STDOUT and STDERR again?

I know that the solution would be to save STDOUT before playing with it:

 $ exec 3>&1 $ exec 1>&- $ echo "Nothing will see this" $ exec 1<&3 # Restoring stdout 
+8
source share
2 answers

I run this on an Ubuntu machine, so I'm not sure if this will work for you, but this is what I did:

 $ exec 1>&0 $ exec 2>&0 

Suddenly I had STDOUT and STDERR. Magic!

Explanation: By executing the following commands, we get the following output:

 $ 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 

Since all three fd points to the same thing, we can return them to their normal state by simply pointing to / dev / pts / 10, which exec 1>&0 and exec 2>&0 do

+7
source

The easiest way, since you did not close stdin , which is also connected to your terminal:

 exec 2>&0 1>&0 

You can also use /dev/tty :

 exec 2>/dev/tty 1>&2 

You have to do it blindly, since stderr is the bash echos that you are typing, and without stderr it cannot echo.

+6
source

Source: https://habr.com/ru/post/989486/


All Articles