Próbując odczytać z pliku LUB stdin, chcę zrobić coś takiego:
if [ "$1" == "-" ]
then
INPUTFILE="&0"
fi
Ale jeśli tak zrobię
while read ROW
do
# ... something
done <$INPUTFILE
mam
&0: No such file or directory
Z poziomu wiersza poleceń
cat <&0
działa idealnie, czy istnieje sposób na przechowywanie referencji standardowej w zmiennej?
PS: Wiem, że ten sam wynik można osiągnąć w prosty sposób ...
Odpowiedzi:
4 dla odpowiedzi № 1Są okazje, kiedy cat
ma swoje zastosowania, a to może być jeden z nich:
# Use cat so it works if $1 is just -
cat $1 |
while read ROW
do
...whatever
done
Dokumentuj, dlaczego używasz cat
lubię to; w przeciwnym razie wygląda jak UUOC (Bezużyteczne użycie kota).
2 dla odpowiedzi nr 2
To nie działa, ponieważ powłoka interpretuje &0
jako nazwa pliku.
Zamiast mówić:
INPUTFILE="&0"
mówić:
INPUTFILE="/proc/$$/fd/0"
To sprawi, że będzie czytać z STDIN
bieżącego procesu powłoki.
0 dla odpowiedzi № 3
&0
nie jest nazwą pliku, ale jest częścią zapisu przekierowań we / wy przy użyciu deskryptorów plików: należy przeczytać <&0
jako całość.
Możesz znaleźć więcej szczegółów w ten dokument.