Özet
env [-0iv] [-u isim] [isim=deger ...]
env [-iv] [-C altwd] [-P altpath] [-S dize] [-u isim] [isim=deger ...] program [arguman ...]
Açıklama
env yardımcı programı, komut satırında belirtildiği şekilde ortamı değiştirdikten sonra başka bir yardımcı programı (programı) yürütür. Her isim=deger seçeneği, bir isim ortam değişkeninin deger değeriyle ayarlanmasını belirtir. Bu tür tüm ortam değişkenleri, program yürütülmeden önce ayarlanır.
Seçenekler aşağıdaki gididir:
-0: Her çıktı satırını yeni satır (newline) karakteriyle değil, NUL (sıfır bayt) ile sonlandırır.-i: Programı yalnızca isim=deger seçenekleri tarafından belirtilen ortam değişkenleriyle yürütür. env tarafından devralınan ortam tamamen yoksayılır.
-C altwd Belirtilen yardımcı programı yürütmeden önce belirtilen alternatif çalışma dizinine (alternate working directory) geçer.
-P altpath PATH ortam değişkeninin değerini kullanmak yerine, belirtilen yardımcı programın konumunu bulmak için altpath tarafından belirtilen dizin kümesini arar.
-S dize Verilen dizeyi birden fazla dizeye böler ve elde edilen dizelerin her birini env yardımcı programına ayrı argümanlar olarak işler. -S seçeneği, aşağıda açıklandığı gibi bazı özel karakter kaçış dizilerini tanır ve ayrıca ortam değişkeni ikamesini (substitution) destekler.
-u isim isim ortam değişkeni ortamda mevcutsa, kalan seçenekleri işlemeden önce onu kaldırır. Bu, sh(1) kılavuzundaki unset komutuna benzer. isim değeri ‘=’ karakterini içermemelidir.
-v: env yardımcı programı tarafından gerçekleştirilen işlemin her adımı için ayrıntılı (verbose) bilgi yazdırır. -v seçeneği birden fazla kez belirtilirse ek bilgiler yazdırılacaktır.
Yukarıdaki seçenekler yalnızca herhangi bir isim=deger seçeneğinden önce belirtildiklerinde tanınır.
Herhangi bir program belirtilmezse env, ortamdaki değişkenlerin adlarını ve değerlerini yazdırır. -0 belirtilmediği sürece her isim/değer çifti yeni bir satırla ayrılır; -0 belirtildiğinde ise isim/değer çiftleri NUL ile ayrılır. Hem -0 seçeneği hem de bir program birlikte belirtilemez.
env yardımcı programı, bariz nedenlerden dolayı adında eşittir işareti (‘=’) bulunan program değerlerini işleyemez. Bu durum, argümanlarını basitçe yürüten command(1) yardımcı programı araya sokularak kolayca aşılabilir; aşağıdaki ÖRNEKLER bölümüne bakın.
-S (dize bölme) işleminin ayrıntıları
-S seçeneğinin işlenmesi, verilen dizeyi dizede bulunan boşluk veya
Tek (“'”) veya çift (‘"’) tırnak işaretleri ya da ters eğik çizgi (‘\’) kullanılarak bu yeni argümanlardan birinin içine boşluklar ve sekmeler yerleştirilebilir. Tek tırnaklar, eşleşen tek tırnağa kadar olan tüm tek tırnak dışındaki karakterleri kaçırır. Çift tırnaklar, eşleşen çift tırnağa kadar olan tüm çift tırnak dışındaki karakterleri kaçırır. Eşleşen tırnak karakterinden önce dizenin sonuna ulaşılması bir hatadır.
-S seçeneği, ‘#’ karakteriyle başlayan yeni bir argüman oluşturursa, o argüman ve dizenin geri kalanı yoksayılır. Dizenin geri kalanının atlanmasına neden olmadan yeni bir argümanın ‘#’ karakteriyle başlamasını istediğinizde ‘#’ dizisi kullanılabilir.
Dize değerini işlerken, -S işlemi belirli karakter kombinasyonlarını yapılması gereken bir eylemi temsil eden kaçış dizileri olarak ele alacaktır. Karakter kaçış dizileri ters eğik çizgi gösterimindedir. Karakterler ve anlamları aşağıdaki gibidir:
\c Dizedeki kalan karakterleri yoksayır. Bu, çift tırnaklı bir dizenin içinde görünmemelidir.
\f
-S işleminin yürütülmesi, ortam değişkenlerinden değerlerin ikame edilmesini (substitution) de destekler. Bunu yapmak için, ortam değişkeninin adı ‘${}’ içinde olmalıdır, örneğin: ${DEGISKEN}. Sık kullanılan kabuk sözdizimi olan $DEGISKEN desteklenmez. İkame edilen tüm değerler, env yardımcı programı ilk çağrıldığındaki ortam değişkenlerinin değerleri olacaktır. Bu değerler, yukarıda açıklanan kaçış dizilerinin hiçbiri için kontrol edilmeyecektir. Ve isim=deger ayarlarının hiçbiri, -S işlemindeki ikame için kullanılan değerleri etkilemeyecektir.
Ayrıca, -S işlemi çoğu kabuk tarafından tanımlanan özel parametrelerin değerlerine başvuramaz. Örneğin -S; verilen dizede görünseler bile ‘$*’, ‘$@’, ‘$#’, ‘$?’ veya ‘$$’ gibi özel parametreleri tanıyamaz.
Kabuk betiklerinde kullanım env yardımcı programı, execve(2) kılavuzunda açıklandığı gibi, yorumlanan betiklerin ilk satırında yorumlayıcı (interpreter) olarak sıklıkla kullanılır.
Yorumlanan bir betiğin ‘#!’ (ilk satırı) kısmının Darwin üzerinde, diğer birçok yaygın sistemden farklı şekilde ayrıştırıldığını unutmayın. İlk satır, satırda bulunan herhangi bir boşluk (boşluk veya
#!/usr/local/bin/php -n -q -dsafe_mode=0
o zaman /usr/local/bin/php programı şu argümanlarla başlatılacaktır:
arg[0] = '/usr/local/bin/php' arg[1] = '-n' arg[2] = '-q' arg[3] = '-dsafe_mode=0' arg[4] = '/usr/local/bin/someport'
artı kullanıcının someport betiğini yürütürken belirttiği argümanlar. Ancak, ‘#!’ satırındaki birden fazla seçeneğin bu şekilde işlenmesi, diğer birçok işletim sisteminin yorumlanan bir betiğin ilk satırını ayrıştırma şekli değildir. Özellikle, diğer sistemlerdeki aynı ilk satır, /usr/local/bin/php programının şu argümanlarla başlatılmasına neden olacaktır:
arg[0] = '/usr/local/bin/php' arg[1] = '-n -q -dsafe_mode=0' arg[2] = '/usr/local/bin/someport'
artı kullanıcının belirttiği argümanlar. Sonuç olarak, -S seçeneğinin şu şekilde kullanımları:
#!/usr/bin/env -S /usr/local/bin/php -n -q -dsafe_mode=0
Darwin üzerinde beklenenden farklı davranacaktır; Darwin bunun yerine bu ilk satırın orijinal sürümünü sanki doğrudan bir kabukta yürütülmüş gibi ayrıştıracaktır.
Ortam
env yardımcı programı, adında ‘/’ karakteri bulunmayan talep edilen yardımcı programı bulmak için -P seçeneği belirtilmediği sürece PATH ortam değişkenini kullanır.
Çıkış Durumu
env yardımcı programı başarı durumunda 0, bir hata oluştuğunda ise >0 değeriyle çıkış yapar. 126 çıkış durumu, yardımcı programın bulunduğunu ancak yürütülemediğini gösterir. 127 çıkış durumu ise yardımcı programın bulunamadığını gösterir.
Örnekler
env yardımcı programı genellikle yorumlanan bir betiğin ilk satırının bir parçası olarak kullanıldığından, aşağıdaki örnekler env yardımcı programının betiklerde yararlı olabileceği bir dizi yolu göstermektedir.
Yorumlanan bir betiğin çekirdek (kernel) tarafından işlenmesi, bir betiğin kendi yorumlayıcısı olarak doğrudan başka bir betiğe başvurmasına izin vermez. Bunu aşmanın bir yolu olarak, şu iki satır arasındaki temel fark:
#!/usr/local/bin/foo
ve
#!/usr/bin/env /usr/local/bin/foo
ikincisinin, /usr/local/bin/foo kendisi de yorumlanan bir betik olsa bile çalışmasıdır.
env'nin muhtemelen en yaygın kullanımı, yorumlayıcının farklı sistemlerde farklı dizinlerde olabileceği durumlarda, bir betik için doğru yorumlayıcıyı bulmaktır. Aşağıdaki örnek, PATH tarafından belirtilen dizinleri arayarak ‘perl’ yorumlayıcısını bulacaktır.
#!/usr/bin/env perl
Bu örneğin bir sınırlaması, kullanıcının PATH değerinin yürütmek istediğiniz yorumlayıcıyı bulacak bir değere ayarlandığını varsaymasıdır. Programın aranmasında belirli bir dizin listesinin kullanıldığından emin olmak için -P seçeneği kullanılabilir. Bu örneğin düzgün çalışması için -S seçeneğinin de gerekli olduğunu unutmayın.
#!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl
Yukarıdaki komut ‘perl’i yalnızca /usr/local/bin veya /usr/bin dizinindeyse bulur. Bu, daha fazla esneklik sağlamak için PATH değişkeninin mevcut değeriyle birleştirilebilir. -S ve -P seçenekleri arasında boşluk gerekmediğini unutmayın:
#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl
To execute a utility with an equal sign in its name:
env name=value ... command foo=bar arg ...
Uyumluluk
env yardımcı programı, -i seçeneğinin bir eş anlamlısı olarak - seçeneğini kabul eder.
Ayrıca Bakınız
printenv(1), sh(1), execvp(3), login.conf(5), environ(7)
Standartlar
env yardımcı programı IEEE Std 1003.1-2001 (“POSIX.1”) standartlarına uygundur. -0, -C, -P, -S, -u ve -v seçenekleri, FreeBSD tarafından desteklenen ancak diğer işletim sistemlerinde mevcut olmayabilecek standart dışı uzantılardır.
Tarihçe
env komutu ilk olarak 4.4BSD sürümünde ortaya çıkmıştır. -P, -S ve -v seçenekleri FreeBSD 6.0 sürümünde eklenmiştir. -C seçeneği FreeBSD 14.2 sürümünde eklenmiştir.
Hatalar
env yardımcı programı, -S seçeneğini işlerken çoklu baytlık (multibyte) karakterleri hesaba katmaz, bu da bazı yerel ayarlarda (locales) yanlış sonuçlara yol açabilir.
macOS 26.4 Ekim 8, 2024 macOS 26.4