Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: romanio 01. 10. 2016, 21:38:05
-
Dobrý večer,
píšu skript, kterému budu předávat jeden z parametrů dvěma různými způsoby: jako poziční parametr a přesměrováním výstupu jiného skriptu.
To by nebyl až tak problém.
$cat stdin.sh
#!/bin/bash
if [ "$1" ]; then var=$1; else var=`cat`; fi
echo '"'$var'"'
$ ./stdin.sh AAA
"AAA"
$ echo BBB | ./stdin.sh
"BBB"
V některých situacích však tento parametr nebude potřeba vůbec.
Můžu to sice obejít takto:
$ echo | ./stdin.sh
nebo přidáním přepínače např.
$ ./stdin.sh --no-param
ale to se mi moc nelíbí.
Napadlo mě, jestli by nebylo možno u čtení stdin nějak jednoduše zjistit, jestli je na něj přesměrován výstup od jinud a číst jej jen pokud ano.
Je to vůbec možné ? Děkuji za radu.
-
http://stackoverflow.com/questions/911168/how-to-detect-if-my-shell-script-is-running-through-a-pipe
-
Díky moc za nakopnutí, už to funguje dle mých představ:
$ cat stdin.sh
#!/bin/bash
if [ "$1" ]; then
var=$1
elif [ ! -t 0 ]; then
var=`cat`
fi
echo '"'$var'"'
$ ./stdin.sh
""test
$ ./stdin.sh A
"A"
$ echo B | ./stdin.sh
"B"
Jen mě trochu mate ta použitá negace. Co jsem našel pro test, tak :
[ -t <fd> ] - True, if file descriptor <fd> is open and refers to a terminal.
Z toho bych usuzoval, že při přesměrování vrátí True a ne naopak.
-
$ ./stdin.sh
""test
správně je:
$ ./stdin.sh
""
-
Jen mě trochu mate ta použitá negace. Co jsem našel pro test, tak :
[ -t <fd> ] - True, if file descriptor <fd> is open and refers to a terminal.
Z toho bych usuzoval, že při přesměrování vrátí True a ne naopak.
::) CVAK ! Jasně, že při přesměrování NENÍ stdin připojen na terminál.