SORU
7 HAZİRAN 2009, Pazar


Nasıl bir Bash komut bir değişken standart hata saklamak için

Diyelim ki aşağıdaki gibi bir senaryo var ki:

useless.sh

echo "This Is Error" 1>&2
echo "This Is Output"

Ve başka bir kabuk komut dosyası var:

alsoUseless.sh

./useless.sh | sed 's/Output/Useless/'

Yakalamak istiyorum "Bu hatadır", ya da bir değişken useless.sh, herhangi bir diğer stderr. Hadi HATA arayın.

Bir şey için stdout kullanıyorum dikkat edin. Stdout kullanmaya devam etmek istiyorum, içine stdout stderr yönlendirmek yararlı, bu durumda değil.

Yani, temelde, ben yapmak istiyorum

./useless.sh 2> $ERROR | ...

ama belli ki işe yaramıyor.

Ben de yapabileceğimi biliyorum

./useless.sh 2> /tmp/Error
ERROR=`cat /tmp/Error`

ama bu çirkin ve gereksiz.

Eğer cevap burada açarsanız ne yazık ki, bunu yapmak zorundayım.

Başka bir yolu vardır diye umuyorum.

Daha iyi fikri olan var mı?

CEVAP
8 HAZİRAN 2009, PAZARTESİ


alsoUseless.sh

Bu sana sed gibi bir komut ile boru useless.sh komut çıktısı ve bir değişken error adlı stderr kaydetmek için izin verir. Boru sonucunu görüntülemek için stdout gönderilen veya başka bir komut içine taşınıyor.

Ek dosya birkaç yönlendirmeler bunu yapmak için gerekli yönetmek için tanımlayıcıları kurar.

#!/bin/bash

exec 3>&1 4>&2 #set up extra file descriptors

error=$( { ./useless.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )

echo "The message is \"${error}.\""

exec 3>&- 4>&- # release the extra file descriptors

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • filmurfreakur

    filmurfreaku

    29 Mart 2007
  • Joshua Bane

    Joshua Bane

    24 Temmuz 2007
  • Tech4Geeks

    Tech4Geeks

    8 Ocak 2012