Sistemimin / bininde bulunan `[` programı nedir?


32

Geçenlerde Fedora'nın /binklasörüne göz atıyordum ve adında bir ikili dosya olduğunu fark ettim [. Bu konuda daha fazla bilgi için interneti aramaya çalıştım, ancak yararlı bir şey bulamadım. Bunu araştırmak strace, daha yakından incelemek için yararlı bir şey üretmiyor gibi görünüyor.

O nedir? Alarma geçmeli miyim? Sistemin uzlaşmasının bir sonucu olabilir mi? Koşmalı mıyım? Herhangi bir pakete ait mi?


4
[ -f /bin/[ ] && printf "%s\n" "Don't panic"
jasonwryan

@ jasonwryan Evet, çözmem biraz zaman aldı. İnternette fazla bilgi bulamadım ve Google pek yardımcı olmadı. Buraya, ayakkabımda olan bir sonrakine yardım edebileceğini umarak gönderdi.
NlightNFotis

10
Komutun man [ne olduğunu görmek için koş [!
Gilles 'SO- kötülük yapmayı bırak'

@Gilles Dürüst olmak gerekirse, yaptım ve hakkında bashbir şeyden bahsettim ve bunun başka bir şey olabileceğini düşündüm. Bu, dosya sisteminizde daha önce hiç görmediğiniz bir isim içeren bir ikili dosya gördüğünüzde aklınıza gelen ilk şey değil. .
NlightNFotis,

4
Bir Do rpm -qif /bin/[it ... nereden geldiğini öğrenmek için
vonbrand

Yanıtlar:


37

[Altında yaşayan ikili /binbirçok GNU / Linux dağıtımlarında ağaçtan alarma gereken bir şey değildir. En azından Fedora 19’da, aşağıda gösterildiği gibi, coreutils paketinin bir parçası:

$ rpm -qf /bin/[
coreutils-8.21-13.fc19.x86_64

ve kabuk betiklerinde veya hatta etkileşimli kullanımda yazılmış testgibi ifadeler için izin vermek için bir eşanlamlıdır [ expression ].


16
Gibi kabuklar bashyerleşik bir testve unutmayın [ve harici ikili çağırmayın.
jordanm

1
@jordanm, bugün çoğu kabuklar (ve diğer birçok basit, ortak operasyonlar) yerleşik olarak var. Ama bu her zaman öyle değildi (ya da bütün kabukları içinde öyle) POSIX tarafından bile zorunlu tutulabilir.
vonbrand

2
@ vonbrand pubs.opengroup.org/onlinepubs/009695399/utilities/test.html Haklısın. [Bu şartname için bir test komutu gereklidir.
yeğen

@ vonbrand, sadece Bourne benzeri mermiler genellikle yerleşik bir [komut içeriyor . Sigara Bourne benzeri gibi olanlar (t)csh, rc, esgenellikle yapamaz ( fishbir istisna vardır).
Stéphane Chazelas 4:14

5

[Komut aynıdır testkomuta.

Shell komut dosyalarına oldukça koşullu ifadeler yazmanıza olanak sağlar. SunOS kılavuz sayfasından:

   if [ "$1" = "pear" ] || [ "$1" = "grape" ] || [ "$1" = "apple" ]
   then
       command
   fi

Kaldırırsanız, komut dosyaları bozulur!


Yerleşik [bir komutu olmayan kabukları için yazılmış komut dosyaları kıracak. Çoğu kabuklar yapar. Yine de, kesinlikle kaldırmayı tavsiye etmem /bin/[.
Keith Thompson,

@KeithThompson, tüm kabuklar [yerleşiktir, [kırılacak kabuk olmayan uygulamaları çalıştıran komut dosyalarıdır . Beğenmek find ... -exec [ -f {} ] \;veyaenv LC_ALL=C [ -f bar ]
Stéphane Chazelas

@StephaneChazelas: Tüm mermiler? (csh ve tcsh yok, ama belki de bu konunun dışında.) Sanırım [yerleşik olmayan bir sh türetilmiş kabuk gördüğümü sanmıyorum , ama [orijinalinde bir yerleşik olduğunu sanmıyorum. Bourne kabuğu. Her durumda, kaldırmak /bin/[kesinlikle kötü bir fikir olacaktır.
Keith Thompson,

Minör kelime oyunu: testve [olduğu neredeyse aynı. [kapanış gerektirir ]; testBuna izin vermiyor (ya da daha doğrusu ]özel bir argümanı ele almıyor ).
Keith Thompson

2

[Her zaman teste eşdeğer olarak verilir, ancak her zaman orada olmasına rağmen] açıkça bahsetmemiştim. Bunu şimdi http://ss64.com/bash/test.html adresinde buldum :

When the [ form is used, the last argument to the command must be a ]

Bu güven verici - Sonunda dedikleri gibi tamamladım.

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.