Geçmiş komutunu kullanmanın bir yolu olup olmadığını merak ediyorum ama sadece başarıyla çalıştırılan komutları listele. Benzer şekilde, hata üretenleri listelemenin bir yolu var mı?
Her komutun çıkış durumu olduğunu biliyorum:
0
- Komutun başarıyla yürütülmesi
1
- Genişletme veya yönlendirme sırasında bir hata nedeniyle komut başarısız olur, çıkış durumu sıfırdan büyüktür.
2
- Hatalı komut kullanımı
12
- Komut bulundu ancak yürütülebilir değil
127
- Komut bulunamadı
ve şu komutla devam ederek kontrol echo $?
edilebilir: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Misal:
Bu 4 komutu çalıştırdıktan sonra:
ls
help
lss
ls nonexistentfile
Sadece 'ls' ve 'help' olması gereken sadece başarılı komutları (0 çıkış durumu) yazdırmak için test etmeyi denedim:
for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out
Bu çıktılar:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Bu biraz işe yarıyor, ancak iki sorun var:
- Bazı nedenlerden dolayı,
grep -v 'bash'
'bash' içeren satırları hariç tutmaz, ama eğer yaparsamgrep 'bash'
, sadece 'bash' içeren satırları içerecektir, birinin neden diğerinin işe yaradığından emin değilim. - Her satırı / komutu dizeyle ayırır. Son
ls
komut olmalı
ls nonexistentfile
, ancak çalışıyorls
venonexistentfile
ayrı komutlar olarak çalışıyor .
Komutta neyi ayarlamam gerektiği konusunda herhangi bir fikrim var ya da bunu nasıl yapacağım?
ls #$CODE, ll #$CODE
ve tarihin çıktısını aldım . Sizin için çalışıyorsa emin değilim, ama değiştirmek zorundased -i '\$s/\$/ \#\$CODE/' $HISTFILE'
içinsed -i '\$s/\$/ \#$CODE/' $HISTFILE
. `` $ CODE önce