Saya bertanya-tanya apakah ada cara untuk menggunakan perintah sejarah tetapi hanya daftar perintah yang berhasil dijalankan. Demikian juga, akankah ada cara untuk membuat daftar yang menghasilkan kesalahan?
Saya tahu setiap perintah memiliki status keluar dari:
0
- Eksekusi perintah berhasil
1
- Perintah gagal karena kesalahan selama ekspansi atau redirection, status keluar lebih besar dari nol.
2
- Penggunaan perintah salah
12
- Perintah ditemukan tetapi tidak dapat dieksekusi
127
- Perintah tidak ditemukan
dan dapat diperiksa melanjutkan perintah dengan echo $?
dari: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
Contoh:
Setelah menjalankan 4 perintah ini:
ls
help
lss
ls nonexistentfile
Saya mencoba menguji untuk mencetak hanya perintah yang berhasil (status keluar dari 0), yang seharusnya hanya 'ls' dan 'help':
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
Output ini:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
Ini agak berhasil, tetapi ada dua masalah:
- Untuk beberapa alasan,
grep -v 'bash'
tidak mengecualikan baris yang berisi 'bash', tetapi jika saya lakukangrep 'bash'
, itu hanya akan menyertakan baris dengan 'bash', saya tidak yakin mengapa satu berfungsi dan tidak yang lain. - Ini memisahkan setiap baris / perintah dengan string.
ls
Perintah terakhir seharusnya
ls nonexistentfile
, tetapi itu berjalanls
dannonexistentfile
sebagai perintah yang terpisah.
Adakah gagasan tentang apa yang harus saya sesuaikan dalam perintah, atau bagaimana cara melakukannya?
sumber
ls #$CODE, ll #$CODE
untuk keluaran sejarah. Saya tidak yakin jika bekerja untuk Anda, tapi saya harus mengubahsed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
kesed -i '\$s/\$/ \#$CODE/' $HISTFILE
. Saya mengambil `` out sebelum $ CODE#
(tanpa kode) tanpa melarikan diri. Pasti ada masalah mengutip.