history - Yalnızca başarıyla çalıştırılan komutları listele


10

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:

  1. Bazı nedenlerden dolayı, grep -v 'bash''bash' içeren satırları hariç tutmaz, ama eğer yaparsam grep 'bash', sadece 'bash' içeren satırları içerecektir, birinin neden diğerinin işe yaradığından emin değilim.
  2. Her satırı / komutu dizeyle ayırır. Son lskomut olmalı
    ls nonexistentfile, ancak çalışıyor lsve nonexistentfileayrı komutlar olarak çalışıyor .

Komutta neyi ayarlamam gerektiği konusunda herhangi bir fikrim var ya da bunu nasıl yapacağım?

Yanıtlar:


4

Bu, kimin ne yaptığını izlemek için paylaşılan bir hesapta bir kez kullandığım bir kesmekti:

PROMPT_COMMAND="history -a; sed -i '\$s/\$/ \#$NAME/' $HISTFILE; history -r; $PROMPT_COMMAND"

Görüntülenmeden historyönce yazar PROMPT: aslında, her komuttan sonra. Çıkış kodunu geçmişe kaydetmeyi kullanmak için bunu değiştirebilirsiniz:

PROMPT_COMMAND="CODE=$?; history -a; sed -i '\$s/\$/ \#\$CODE/' $HISTFILE; history -r; $PROMPT_COMMAND"

Bu, geçmişinizde aşağıdaki gibi girişler bırakacaktı:

$ history 2
 1271  vim .bashrc #0
 1272  history 2

(Son giriş, güncellenecektir sonrahistory çıkış kodu bu çıktıda görünmüyorsa, böylece komut çıkar.)

Bu, isteminizdeki geçmişin yorum yapması için can sıkıcı bir etkiye sahiptir:

$ # press up
$ history 2 #0

Yorum genellikle yürütmeyi veya çıktıyı etkilemez, ancak düzenlemeyi bir acı haline getirir.

Şimdi grephangi kodların başarıyla çıktığını görmek için geçmişinizi görebilirsiniz:

history | grep '#0$'
# or grep '#[^0]*$' for unsuccessful commands.

Hem Mobaxterm'da hem de Putty'de denedim ls #$CODE, ll #$CODEve tarihin çıktısını aldım . Sizin için çalışıyorsa emin değilim, ama değiştirmek zorunda sed -i '\$s/\$/ \#\$CODE/' $HISTFILE'için sed -i '\$s/\$/ \#$CODE/' $HISTFILE. `` $ CODE önce
çıktım

@lkisac İşin garibi, kaçmadan #(kod olmadan) verdi . Bazı alıntılar olmalı.
muru
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.