From 66acd17bc02a8b3ff6292f1fc499b2712edf91f3 Mon Sep 17 00:00:00 2001 From: David Adam Date: Sun, 1 Feb 2015 17:11:44 +0800 Subject: [PATCH] isatty: revert to previous behaviour This partially reverts commit 60808a4820b1714. --- doc_src/isatty.txt | 14 ++++++++------ share/functions/isatty.fish | 37 +++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/doc_src/isatty.txt b/doc_src/isatty.txt index 91e5c9c75..f6ab500e6 100644 --- a/doc_src/isatty.txt +++ b/doc_src/isatty.txt @@ -1,15 +1,17 @@ -\section isatty isatty - test if a file or file descriptor is a tty. +\section isatty isatty - test if a file descriptor is a tty. \subsection isatty-synopsis Synopsis \fish{synopsis} -isatty [FILE | DEVICE | FILE DESCRIPTOR NUMBER] +isatty [FILE DESCRIPTOR] \endfish \subsection isatty-description Description -`isatty` tests if a file or file descriptor is a tty. The argument may be in the form of a file path, device, or file descriptor number. Without an argument, `standard input` is implied. +`isatty` tests if a file descriptor is a tty. -If the resolved file descriptor is a tty, the command returns zero. Otherwise, the command exits one. No messages are printed to standard error. +`FILE DESCRIPTOR` may be either the number of a file descriptor, or one of the strings `stdin`, `stdout`, or `stderr`. + +If the specified file descriptor is a tty, the exit status of the command is zero. Otherwise, the exit status is non-zero. No messages are printed to standard error. \subsection isatty-examples Examples @@ -20,14 +22,14 @@ From an interactive shell, the commands below exit with a return value of zero: isatty isatty stdout isatty 2 -echo | isatty /dev/fd/1 +echo | isatty 1 \endfish And these will exit non-zero: \fish echo | isatty -isatty /dev/fd/9 +isatty 9 isatty stdout > file isatty 2 2> file \endfish diff --git a/share/functions/isatty.fish b/share/functions/isatty.fish index f49b3aa4e..d4f2c43e3 100644 --- a/share/functions/isatty.fish +++ b/share/functions/isatty.fish @@ -1,27 +1,28 @@ -function isatty -d "Test if a file or file descriptor is a tty." -# Use `command test` because `builtin test` doesn't open the regular fd's. +function isatty -d "Tests if a file descriptor is a tty" + set -l fd 0 + if count $argv >/dev/null + switch $argv[1] - switch "$argv" + case -h --h --he --hel --help + __fish_print_help isatty + return 0 - case '-h*' '--h*' - __fish_print_help isatty + case stdin + set fd 0 - case '' - command test -c /dev/stdin + case stdout + set fd 1 - case '*' - if test -e "$argv" # The eval here is needed for symlinks. Unsure why. - command test -c "$argv"; and eval tty 0>"$argv" >/dev/null + case stderr + set fd 2 - else if test -e /dev/"$argv" - command test -c /dev/"$argv"; and tty 0>/dev/"$argv" >/dev/null + case '*' + set fd $argv[1] - else if test -e /dev/fd/"$argv" - command test -c /dev/fd/"$argv"; and tty 0>/dev/fd/"$argv" >/dev/null + end + end + + eval "tty 0>&$fd >/dev/null" - else - return 1 - end - end end