2011-05-13 17 views
6

Ffmpeg temelli küçük bir uygulama üzerinde çalışıyorum ve tutorial made for ubuntu numarasını okudum ve burada oluşturulan yürütülebilir dosyada hash komutunu kullanmaları önerilir.'Karma' komutunun kullanımı

Bu komutu merak ediyorum, hiç kullandınız mı? Hangi amaçla? Benim kaynak klasöründe çalıştırın

, ben olsun bu (bir kez derlenmiş)

$ hash 
hits command 
    1 /usr/bin/strip 
    1 /usr/local/bin/ffmpeg 
    1 /usr/bin/svn 
    4 /usr/local/bin/brew 
    2 /usr/bin/git 
    1 /bin/rm 
    1 /bin/cat 
    1 /usr/bin/ld 
    1 /bin/sh 
    4 /usr/bin/man 
    5 /usr/bin/make 
    4 /usr/bin/otool 
    15 /bin/ls 
    6 /usr/bin/open 
    2 /usr/bin/clear 

Ben bir yürütülebilir dosya üzerinde çalıştırdığınızda

, yapmam ... benim bash_history dosyası bir özeti gibi görünüyor görüntülenen çok fazla satır yok ve bu uygulamada hiçbir değişiklik yok gibi görünüyor mu?

$ md5 ffserver 
MD5 (ffserver) = 2beac612e5efd6ee4a827ae0893ee338 
$ hash ffserver 
$ md5 ffserver 
MD5 (ffserver) = 2beac612e5efd6ee4a827ae0893ee338 

Adamı aradığımda, bunun yalnızca yerleşik bir işlev olduğunu söylüyor.

It does iş :) Gerçekten kullanışlı Linux ve MacOSX üzerinde ( mevcut diyelim). Yardımlarınız için

sayesinde, muhtemelen bugün :)

cevap

8

hash aslında geçmişi olmayan bir şey öğreneceksiniz; son zamanlarda yürütülen programların bir karma tablo koruyan bir bash(1) kabuk yerleşik bağlıdır: (. bash(1) itibaren)

Bash uses a hash table to remember the full pathnames of 
    executable files (see hash under SHELL BUILTIN COMMANDS 
    below). A full search of the directories in PATH is 
    performed only if the command is not found in the hash table. 

kılavuz senin bunu çalışan önerdi olabilir bulundu sadece hangiffmpeg görmek komut bir sonraki adım tarafından yürütülecekti; belki de dağıtım paketi tarafından sağlanan bir ffmpeg programı var ve onlar kabukta ffmpeg yazdıysanız, yeni birinin dağıtılan yerine yerine uygulanacağından emin olmak istediler. o da önce dağıtıma sağlanan sürümünü PATHyeni ffmpeg içeren dizini sahip gerektirecektir çünkü

Bu bir streç gibi görünüyor ve bunun garantisi yok.

+0

Serin, teşekkürler ... ben genelde $ PATH içinde derleme yok çünkü ben, bir derleme sonra bu kullanmalısınız neden hala alamadım. – Rob

+1

@Rob, kabul edildi, bana garip geliyor. Sanırım on beş ya da on altı yıl içinde bir kez ya da Unix ya da Linux sistemleri kullanıyorum, ve o zamanlar benim tecrübemden dolayı olabilir. – sarnold

+0

Ayrıca bkz. Http://unix.stackexchange.com/questions/86012/what-is-the-purpose-of-the-hash-command –

6

Sistemde yüklü olmayan komutları kullanırsanız, kullanılabilirliğini kontrol edin ve kullanıcıya neyin eksik olduğunu bildirin. Scripting with style

Örnek Gönderen:

NEEDED_COMMANDS="sed awk lsof who" 

missing_counter=0 
for needed_command in $NEEDED_COMMANDS; do 
    if ! hash "$needed_command" >/dev/null 2>&1; then 
    printf "Command not found in PATH: %s\n" "$needed_command" >&2 
    ((missing_counter++)) 
    fi 
done 

if ((missing_counter > 0)); then 
    printf "Minimum %d commands are missing in PATH, aborting" "$missing_counter" >&2 
    exit 1 
fi