Test / hata ayıklama sırasında Bash koşullu yönlendirme


2

Koşullu olarak Bash’de sınama ve hata ayıklama amacıyla yeniden yönlendirme yapmanın en iyi yolu nedir?

Komut dosyalarımda, herhangi bir işlem yapmadan bir test çalıştırması sırasında etkin bir şekilde ne olacağını göstermek için bir hata ayıklama seçeneği ekliyorum. Hata ayıklama seçeneği açıksa, DEBUG seçeneğinin, yönlendirmeyi etkin bir şekilde yeniden yönlendirmeyi ve ekoyu yönlendirmemesini sağlayan bir komut dosyası satırını yankılamasını istiyorum . Bir örnek muhtemelen bunu daha iyi açıklar:

Args kullanarak bir mysqldump yapacak bir betikte, hata ayıklama seçeneğinin mysqldump komutunu -d seçeneği olmasa bile çalışacak şekilde göstermesini isterdim.

[ "-d" = "$1" ] && DEBUG=echo
$DEBUG mysqldump -u"$user" -p"$pass" -h"$host" "$dbase" > $dbase.sql.dump

Bu yüzden yankılanıyorsam, çünkü DEBUG "eko" Ben "$ dbase.sql.dump" ekosunu istemiyorum. Aslında ">" ve "$ dbase" değişkenini ".sql.dump" ile eko yapmak istiyorum. " Metin. Hata ayıklama seçeneği açık değilse komutu olduğu gibi çalıştırmak istiyorum.

set -xVe set -vhata ayıklama gerçekten kullanıcı görmek ve gerçekten kodlama sorunları gidermek için senaryoyu ayıklama olamaz sadece bir test çıktısı / kuru işletilen seçenektir çünkü seçenekleri gerçekten burada cevap değildir.

Yanıtlar:


2

Sorun her şeyden doğru bir şekilde kaçmak olacak. Neden böyle biraz farklı bir yaklaşım denemiyorsunuz:

CMD='mysqldump -u"$user" -p"$pass" -h"$host" "$dbase" > "$dbase.sql.dump"';
[ "-d" = "$1" ] && echo $CMD
eval $CMD

Hile komutu bir değişken olarak kaydediyor ve ardından değişkeni yalnızca hata ayıklama yapıyorsanız yazdırıyor. Bu, iki kez yazma ihtiyacını ortadan kaldırır ve daha sonra evaliçerdiği komutu çalıştırmak için değişkeni yapabilirsiniz .


Gerçekten yürütülen farklı bir satır istemedim; yani hata ayıklama çizgisi, hata ayıklamayan çizgiyle aynı çizgidedir. Ayrıca oldukça her satır üç çizgi sürerse çirkin ödeyeceksin kodu: kontrol için, eğer hata ayıklama bir CMD ayarlamak ve eko ve son CMD eval
johnnyB

@johnnyB şahsen ben böyle bir şeyi bir fonksiyonun içine sardım ve sadece çağırdım run_or_echo($CMD)ve bu -dda yankı yapıp çalıştırmamayı kontrol eden ve karar veren fonksiyondur . Bu aslında her komut için orijinal komut dosyanızdan daha az satır. Her neyse, eminim istediğin gibi yapamayacağından eminim, çünkü >komutu çalıştırırken kullanman gerekecek ve yankılanırken kaçman gerekecek ve her şeyi tırnak işaretleri içine alamazsın, bash kazancına neden olacak bir komut olarak tanımıyorum. Bu başka bir yol göremiyorum, >bir olan bashözel karakter ve senaryo tarafından yorumlanır ediliyor bash.
terdon

Etrafta bir çalışma göremiyorum ... belki set -x
-v'ye
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.