$ {Arg? Word} hatalarının ürettiği mesajı temizlemek mümkün mü?

Bash bir senaryoyu ve karşılaşmayı yorumlarken

${arg?error message}

arg unset yapılmadığında, hata mesajı yazdırıldıktan sonra betik sona erer. Ne yazık ki, bash hata mesajına "0 $: line $ LINENO: arg:" değerini ekler. Ek bilgileri bastırmak mümkün mü? Hata mesajının tam olarak "hata mesajı" olmasını isterim.

2

2 cevap

Muhtemelen $ {PARAMETER? WORD} yapısından kaçınmanız ve bunu manuel olarak yapmanız gerekir. Örneğin, bir şey gibi

if [ -z "${arg+set}" ]; then
    printf 'error message\n' >&2
    exit 2
fi
2
katma

Bunu yapmak istiyorsanız, en büyük amacınızı Bash'te en doğal şekilde yerine getiremeyeceğinizi tahmin ediyorum. Böyle bir şey daha iyi olmalı:

if [ -z $arg ]; then
    echo error message >&2;
else
    $arg
fi

Bununla birlikte, soruyu daha doğrudan yanıtlama:

(${arg?error message}) |& sed "s/.*: .*: //"

Explanation: The |& connects the standard error of the block of code in the parentheses (which are necessary for this to work, by the way) into sed (stream editor), which strips off the part of the message you don't want with a regular expression.

0
katma
@WilliamPursell Aslında, efendim, Bash'te test ettim ve gayet iyi çalıştı.
katma yazar Keith Pinson, kaynak
@WilliamPursell | & bir sebepten dolayı sizin için çalışmıyorsa, 2> & 1 | de hile yapmalıdır; Bu sadece özlü değil.
katma yazar Keith Pinson, kaynak
| & bash bir sözdizimi hatası. Bunun bir csh yapısı olduğuna inanıyorum.
katma yazar William Pursell, kaynak