41 lines
		
	
	
		
			675 B
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			675 B
		
	
	
	
		
			Bash
		
	
	
	
	
	
emulate -L zsh
 | 
						|
 | 
						|
zmodload zsh/curses
 | 
						|
 | 
						|
test_fd0() {
 | 
						|
    true <&0
 | 
						|
}
 | 
						|
 | 
						|
local restore=0 FD
 | 
						|
 | 
						|
# Reattach to terminal
 | 
						|
if [ ! -t 0 ]; then
 | 
						|
    # Check if can reattach to terminal in any way
 | 
						|
    if [[ ! -c /dev/tty && ! -t 2 ]]; then
 | 
						|
        echo "No terminal available (no /dev/tty and no terminal at stderr)"
 | 
						|
        return 1
 | 
						|
    fi
 | 
						|
 | 
						|
    if test_fd0 2>/dev/null; then
 | 
						|
        exec {FD}<&0
 | 
						|
        restore=2
 | 
						|
    else
 | 
						|
        restore=1
 | 
						|
    fi
 | 
						|
 | 
						|
    if [[ ! -c /dev/tty ]]; then
 | 
						|
        exec <&2
 | 
						|
    else
 | 
						|
        exec </dev/tty
 | 
						|
    fi
 | 
						|
fi
 | 
						|
 | 
						|
# Run the command
 | 
						|
"$@"
 | 
						|
 | 
						|
# Restore FD state
 | 
						|
(( restore == 1 )) && exec <&-
 | 
						|
(( restore == 2 )) && exec <&$FD && exec {FD}<&-
 | 
						|
 | 
						|
# vim: set filetype=zsh:
 |