Yeniden yönlendirmenin parantezin dışında neden olduğunu merak ettiğinizi düşünüyorum. Bu satırda
:
if ($PROG --version) </dev/null> /dev/null 2>&1; then
parantez if
ifadesinin sözdizimi parçası değildir; sadece komut gruplamasını belirtirler. (O kendim hatırlamak Bana bir dakika sürdü; csh/tcsh içinde, bir if
ifadesinin sözdizimi parçasıdır parantez.) Örneğin
bu:
(echo one ; echo two) | tr a-z A-Z
bu çıktıyı üretecek : $PROG --version
beri Bu durumda
ONE
TWO
, tek komut, (
$PROG
birden fazla komuta genişler sürece, ama bu düşüktür) parantezler gereksizdir.
Yeniden yönlendirme, if
bildirimi için geçerli değildir; $PROG --version
için geçerlidir. Amaç, (boş bir dosyadan okuma yapıyormuş gibi) $PROG
no'lu girdi sağlamak ve stdout veya stderr'e yazdığı her şeyi atmaktır. $PROG
, --version
ile çağrıldığında bile, stdin'den okuyan bir komutsa, giriş yönlendirmesi olmadan klavye girişini beklemeye alabilir.
komut bir hata üretmez sadece $PROG --version
if (her ne olabilirse) $PROG
çağırmak için güvenli olduğunu varsayar. Eğer bir if ifadesine yönlendirmeyi uygulayabilir
Not:
if test_command ; then
something
else
something_else
fi </dev/null> /dev/null 2>&1
Bu test_command
, something
, vesomething_else
için giriş ve çıkış yönlendirir.
Teşekkürler. Hala ne kadar yararlı olduğunu bilmiyorum, ne $ PROG olduğunu biliyorum ve 'PROG --version'un girdi beklemediğini biliyorum. Örneğin, 'PROG = autoconf', bunu gördüğüm yerlerden biridir.Ve biliyorum ki 'autoconf --version' girişi beklemiyor. Bu durumda hala yararlı mı? –
@Carl Norum, '(' $ PROG --version ') '(açılı ayraçlı) komutunu çalıştırmak için burada kullanılabilir ve böylece' '/ dev/null'' 'a ihtiyaç duymaz mı? – fduff
Açı braketleri? –