Kaynaklanmış komut dosyalarına “bash -x” (hata ayıklama modu) nasıl yeniden derleme yapabilirim?


10

Linux için giriş başlatma konusunda bash'ın ne yaptığını hata ayıklamaya çalışıyorum. Ben "bash -x" bash ne yaptığını yazdıracağını okudum, ama "set -x" gibi kaynaklı dosyaları komutları yazdırmaz. "Set -x" kullanamıyorum çünkü başlatma işlemi çağırmadan önce çalışıyor. "bash -x", OS X'te iyi bir durum gibi görünüyor, ancak bunun nedeni bash sürümleri olabilir.

Linux: 3.2.25

OS X: 3.2.48

İşte Linux'ta yinelenmeyen davranıştan bir alıntı:

bash -l -x -c 'echo 1'
# ... snip ...
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/vim.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/vim.sh
+ for i in '/etc/profile.d/*.sh'
+ '[' -r /etc/profile.d/which-2.sh ']'
+ '[' '' ']'
+ . /etc/profile.d/which-2.sh
# ... snip ...

/Etc/profile.d/vim.sh dosyasının nasıl kaynaklandığına, ancak komutlarının yazdırılmadığına dikkat edin. Yükseltmeden bir çözüm var mı? Bu sürüm farkından mı kaynaklanıyor?

Yanıtlar:


1

set -xKök dosyada bir yerde (diğer tüm dosyaları gerektiren dosya) çalışmalıdır. Alternatif olarak, [[ !-z "$DEBUG" ]] && set -xher dosyaya benzer bir şey tanıtın ve ile çağırın DEBUG=1 script.sh.


Kök dosya nerede? Platformdan bağımsız mı?
Kelvin

"Kök dosya" ile basitçe kabukta çağırdığınız ve diğer dosyaları içe aktardığınız dosyayı kastediyorum. Örneğimde, kök dosya script.sh
mkaito

1
Ancak bash giriş başlatma komut dosyası çalıştırılmadan önce gerçekleşir. Komut dosyasında "set -x" komutunu çalıştırmak için çok geç. Kendiniz deneyin - "bash -l -x script.sh" dosyasını çalıştırın. Komut dosyanızın komutları çalıştırılmadan önce bir şeyler olduğunu göreceksiniz.
Kelvin

Neden Dünya'da bir senaryo çalıştırırsın bash -l? Bu etkileşimli mermiler içindir. Komut dosyası etkileşimli bir kabuk değildir.
mkaito

3
Lütfen biraz daha açık fikirli olun - açıkçası bash yaratıcıları yararlı olacağını düşündü. 2 kullanım görüyorum (en az): 1) Çalıştırmak istiyorsunuz, ssh user@host 'bash -l -c command'böylece uygun env yüklensin. 2) Siz bir sysadmin'siniz ve komut dosyanız çalışmadan önce init komut dosyalarının ne yaptığını sorun gidermek istiyorsunuz - size gösterecektir. Bazen bir env değişkeninin nerede ayarlandığını bilmek istersiniz. bash -l -x
Kelvin

0

Komut dosyaları kaynakladığınız ve yürütmediğiniz için, ana komut dosyasındaki ilk komutunuz "set -x" olmalıdır

Şimdi tüm kaynaklı komut dosyaları hata ayıklamada daha fazla çalışacaktır. Bir komut dosyasını kaynakladığınızda, geçerli kabukta çalışır, bu nedenle -x'i bir kez ayarlarsanız, tüm kaynak komut dosyaları için iyi olur.

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.