Vzhledem k tomu, že POSIX je nejblíže společnému standardu mezi všemi uniicemi, zajímá mě, zda existuje shell, který jej výhradně podporuje. Zatímco většina moderních shellů poskytuje podporu pro POSIX (a bude bez problémů spouštět skripty vyhovující POSIX), neodvádějí dobrou práci při poukazování na funkce, které nejsou kompatibilní.
Existuje nějaký shell, který implementuje pouze POSIX a POSIX takovým způsobem, že by vyvolal chybu pro jakoukoli nevyhovující funkci?
UPRAVIT Chci objasnit, že se neptám na obecné tipy pro psaní přenosných shellových skriptů. Související otázka zmíněná v komentářích to již pokryla. Napadla mě tato otázka, když jsem zjistil, že bash
má --posix
možnost, ale jen proto, abych zjistil, že to ovlivňuje pouze některá inicializační chování, což není přesně to, co hledám.
Přijatá odpověď:
Bohužel „přenosné“ je obvykle silnější požadavek než „vyhovující POSIX“ pro skripty shellu. To znamená, že napsat něco, co běží na jakémkoli POSIX shellu, není příliš těžké, ale dostat to, aby to běželo na jakémkoli reálném shellu, je těžší.
Můžete začít instalací všech shellů ve správci balíčků, zejména debianu posh
zní to jako to, co chcete (Policy-compliance Ordinary SHell). Politika Debianu je POSIX s několika výjimkami (echo -n
zadané, local
…).
Kromě toho však testování musí pokrýt několik shellů (zejména /bin/sh) na řadě platforem. Testuji na Solaris (/bin/sh a xpg4/sh) a BSD. AIX a HP-UX jsou velmi kompatibilní a nezpůsobují problémy. bash je malý vlastní svět.
Doporučil bych průvodce Autoconf k přenosnému shellu, který je naprosto skvělý a ušetří spoustu času. Velké kusy jsou zastaralé, ale to je v pořádku; pokud vás to nezajímá, jednoduše přeskočte TruUnix a Ultrix a tak dále!