On Wed, 20 Nov 2013, Marcin Zajączkowski wrote:
> I'm porting a script from bash to fish which reads stdin and I have a
> problem with determining if there is anything to read from stdin or (n
> the other case) input should be fetched from call params.
>
> There is in the original script:
> # If no tty, data should be available on stdin
> if ! [[ "$( tty )" == /dev/* ]]; then
> input="$(< /dev/stdin)"
> # Else, fetch input from params
> else
> input="$*"
> fi
>
> and in fact when used after pipe it returns "not a tty". In fish it
> works fine for a simple execution:
> $ echo "aaa" | tty
> not a tty
>
> but when tty is called within my function it always returns /dev/pts/*.
This mirrors the behaviour of your function above:
```
function myfunc
if not tty >/dev/null
read input
else
set input $argv
end
echo $input
end
```
zanchey@motsugo ~> myfunc 1 2 3
1 2 3
zanchey@motsugo ~> echo aaa | myfunc
aaa
> How can I determine that my function has something to on read stdin (to
> not call "read" then which would open an interactive prompt)?
This is a different question; the tty function does not check for the
presence or absence of data on stdin. I don't actually know of a clever
way of doing this from a shell script; in C I guess you'd do a select()
with a zero timeout or something.
David Adam
zanc...@ucc.gu.uwa.edu.au
------------------------------------------------------------------------------
Shape the Mobile Experience: Free Subscription
Software experts and developers: Be at the forefront of tech innovation.
Intel(R) Software Adrenaline delivers strategic insight and game-changing
conversations that shape the rapidly evolving mobile landscape. Sign up now.
http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk
_______________________________________________
Fish-users mailing list
Fish-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/fish-users