Občas potřebuji zadat „ekvivalent cesty“ jednoho ze standardních IO streamů (stdin
, stdout
, stderr
). Vzhledem k tomu, že 99 % času pracuji s Linuxem, vkládám před něj pouze /dev/
získat /dev/stdin
atd. a toto „zdá se dělat správnou věc“. Ale za prvé jsem byl z takového zdůvodnění vždy nesvůj (protože, samozřejmě, „zdá se, že to funguje“, dokud to nefunguje). Navíc nemám dobrý pocit, jak přenosný je tento manévr.
Mám tedy několik otázek:
-
Je v kontextu Linuxu bezpečné (ano/ne) dávat rovnítko
stdin
,stdout
astderr
pomocí/dev/stdin
,/dev/stdout
a/dev/stderr
? -
Obecněji řečeno, je tato ekvivalence „adekvátně přenosná “?
Nemohl jsem najít žádné reference POSIX.
Přijatá odpověď:
V Linuxu byl dostupný již v jeho prehistorii.
není POSIX, ačkoli mnoho skutečných shellů (včetně AT&T ksh
a bash
) bude simulovat, pokud není přítomen v OS; všimněte si, že tato simulace funguje pouze na úrovni shellu (tj. přesměrování nebo parametr příkazového řádku, nikoli jako explicitní argument pro např. open()
).
Mělo by být dostupné na většině komerční unixové systémy, tak či onak (někdy se to píše /dev/fd/N
pro různá celá čísla N
, ale většina systémů s tím bude poskytovat symbolické odkazy jako Linux a *BSD).