2011-07-26 15 views
5

rm'un GNU sürümü, bir -I işaretine sahiptir. manpage Gönderen:rm GNU veya BSD sürümü nasıl test edilir?

-I  prompt once before removing more than three files, or when removing recursively. Less 
      intrusive than -i, while still giving protection against most mistakes 

Mac'ler yok:

$ rm -I scratch 
rm: illegal option -- I 
usage: rm [-f | -i] [-dPRrvW] file ... 
    unlink file 

Bazen insanlar Mac'lerde yüklü coreutils (GNU versiyonu) ve bazen de yok. Devam etmeden önce bu komut satırı bayrağını tespit etmenin bir yolu var mı? o zaman Yapabilirsin takma

touch /tmp/my_core_util_check 

if rm -I /tmp/my_core_util_check > /dev/null 2>&1 ; then 
    alias rm="rm -I" 
else 
    rm /tmp/my_core_util_check; 
fi 
+0

Gerçek bir soru olduğunu düşündüğümden beri başlığı değiştirdim "Çekirdek aracımın iki sürümlerinden hangisini kontrol edebilirim?" Bu gerçekten Mac ve Linux ile ilgili değil (belki de Linux'a karşı daha yakındır, fakat o zaman bile, bu sizin * gerçek * sorunuz değil). – Telemachus

cevap

3

Ben testi geçici dosya üzerinde rm -I çıktısını söyleyebilirim: Ben bash_profile böyle bir şey olmasını istiyorum hep --version ile versiyonunu rm sormak ve onu gnu veya coreutils böyle diyor olmadığını görmek için kontrol edin:

rm --version 2>&1 | grep -i gnu &> /dev/null 
[ $? -eq 0 ] && alias rm="rm -I" 
+2

"rm -I" testine "2> & 1" yi ekledim. –

4

kullanmak geçer eğer

if [ has_gnu_rm_version ]; then 
    alias rm="rm -I" 
fi 
+1

Corey: varsayılan Mac 'rm --version işlevini çalıştırırsanız," illegal bir seçenek "mesajı verilir ve betik sonlanır. –

+0

'rm' komutundan sonra' 2> & 'koymak için düzenlenmiş, bu _should_ bu sorunu çözer. Olmazsa haber ver. –

0

Böyle bir şeye ne dersin?

#!/bin/bash 
rm -I &> /dev/null 
if [ "$?" == "0" ]; then 
    echo coreutils detected 
else 
    echo bsd version detected 
fi 
+0

Oren: Bunu Mac'in her iki sürümünde de çalıştırdım ve betik her iki versiyonun da BSD versiyonu olduğunu düşünüyordu. –

+0

@Kevin BSD sürümleri için yazılan araçlara basılmasını önlemek amacıyla, GNU araçları genellikle Mac'lerde bir 'g' öneki ile yüklenir. Grm'yi dene, belki de cevabımı yukarıda gör. – Telemachus

+1

Ayrıca, "Senaryo her iki sürümde de ..." dediğinde, bu betiği "her iki sürüm" e karşı nasıl çalıştırdınız? Sadece 'rm' çağırmak, 'PATH' (hangisi 'rm' olarak adlandırılırsa varsayalım) ( – Telemachus

5

Bu yoldan başlamamı tavsiye ederim. Komut dosyalarınızı olabildiğince taşınabilir olacak şekilde hedefleyin ve yalnızca güvenebileceğiniz bayraklar/seçenekler/davranışlara güvenin. Kabuk betikleme yeterince zor - neden hata için daha fazla yer ekleyin?

Akılda tuttuğum şeyin bir türünü anlamak için, Ryan Tomayko's Shell Haters talk'a bakın. Ayrıca, POSIX descriptions of shell features and utilities bağlantılarına sahip, çok iyi organize edilmiş bir sayfaya sahip. Örneğin, rm.

+0

Telemachus: Bunu bir ".bash_profile" dosyasına koymayı deniyorum Birden fazla bilgisayardaki hesaplarım varsa, eğer varsa -I 'bayrağı kullanmak güzel olurdu –

+4

@Kevin - bu durumda, son tavsiyem: "rm" bir şey yapmayın. 'ya da başka bir şey yerine (Bazı tartışmalar için yorumları buraya bakın: http: // superuser.com/questions/31171/undo-the-linux-trash-komutu/31172 # 31172) – Telemachus

+0

Tamam. Yardım için teşekkürler! –

6

strings /bin/rm | grep -q 'GNU coreutils'

$ olur? 0, bu coreutils