POSIX, standart yardımcı programların PATH içinde olduğunu garanti ediyor mu?


11

In "Komut Arama ve Yürütme" bölümünde , POSIX şartname söylüyor PATH(bazı istisnalar dışında) yürütmek için bir yardımcı program bulma zaman aranır. Spesifikasyon PATH, tüm standart yardımcı programların bulunacağını garanti eden bir değere başlatılacak herhangi bir yerden bahsediyor mu?

Yoksa standart bir yardımcı programı çalıştırmaya çalışırken asla "komut bulunamadı" hatası almayacağımı garanti etmek için aşağıdaki gibi bir şey yapmam gerekir mi?

PATH=$(command -p sh -c 'printf %s "${PATH}"')

( yardımcı programın POSIX spesifikasyonunacommand bakın )

Yanıtlar:


13

Evet ve hayır. POSIX ortamında, yardımcı programların belirtimde açıklanan şekilde davranması gerekir. Uygulamada bu, yardımcı programların uygun sürümlerinin mevcut olması gerektiği anlamına gelir $PATH. Ancak, programınızı POSIX uyumlu bir sistemde çalıştırırken, programı uygun olmayan bir ortamda çalıştırıyor olabilirsiniz. Pratikte, sık sık olan şey, işletim sisteminin eski bir moda ve bir POSIX moduna sahip olması ve varsayılan olarak eski modda olmasıdır. Bazı komutları kaçırmaktan daha kötü olan eski mod, farklı anlamlara sahip seçenekler gibi uyuşmazlıklara sahip olma eğilimindedir.

Bir iyi alabilir PATHile getconf. Tabii ki, getconforijinalde $PATHdoğru olmayabilir gibi zor . Komut için Uygulama Kullanımı bunu yapmanın bir yolunu gösterir:

command -p getconf PATH

Spesifikasyonu anladığım kadarıyla, programınızı POSIX uyumlu bir ortamda çalıştırıyorsanız bu gerekli değildir; ve programınızı POSIX uyumlu bir ortamda çalıştırmıyorsanız, POSIX geçerli değildir. Bununla birlikte, bu uygulama kullanımı bir öneri olarak alınabilir: eğer bu işe yaramazsa, satıcınıza POSIX spesifikasyonunun mektubu ile ilgili ne yaparlarsa yapsınlar, ruhuna uymadıklarından şikayetçi olabilirsiniz.


Heh, getconf PATHuygulama kullanımı bölümünde bile fark etmedim . Teşekkürler!
Richard Hansen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.