Saya menemukan saya melakukan banyak pekerjaan pada proyek di direktori set. Kadang-kadang - beberapa bulan ke belakang - saya perlu mengulang sesuatu pada proyek itu tetapi saya tidak ingat apa yang saya lakukan. Saya menggunakan mercurial atau git untuk melacak perubahan pada file tetapi saya ingin dapat mengingat perintah apa yang saya keluarkan di direktori itu.
Mencari melalui riwayat shell saya tidak terlalu informatif. Saya sudah mencatat semuanya ke file. * _ History saya, tetapi saya ingin daftar hal-hal yang saya lakukan di ~ / foo / bar, dan tidak semua (juta) hal lain yang saya lakukan minggu itu. Saya mungkin bahkan tidak ingat bulan terakhir saya mengerjakan proyek itu.
Apakah ada yang punya ide bagaimana file log direktori proyek dari semua perintah shell yang saya gunakan? Saya membayangkan sesuatu perintah seperti:
workon myproject
... yang akan mengatur file log shell ke ~ / myproject / .history.log, muat riwayat sebelumnya dari logfile itu, dan mungkin perbarui prompt saya untuk memberi tahu saya direktori apa yang sedang saya kerjakan (seperti misalnya vcprompt untuk menyediakan versi info kontrol).
Apakah ada yang seperti ini di luar sana?
Anda mungkin tertarik pada plugin yang saya tulis bernama direktori-history untuk zsh.
Lihat di sini: https://github.com/tymm/directory-history
Meskipun tidak benar-benar sesuai dengan pekerjaan Anda di myproject alur kerja, itu harus sesuai dengan kebutuhan Anda.
Itu menciptakan sejarah yang mencakup direktori.
Ketika Anda mencari melalui histori Anda, pertama-tama Anda akan mendapatkan perintah dari direktori tempat Anda berada.
Jika tidak ada perintah yang tersisa untuk direktori itu, ia akan kembali ke sejarah global dan menyarankan perintah yang digunakan dalam direktori lain.
sumber
Jika Anda menginginkan sesuatu yang sederhana, Anda dapat memiliki
.history.log
file seperti itu:Kemudian menjalankan file akan
cat
perintah-perintah yang Anda daftarkan di dalamnya.Anda juga bisa mengelompokkan perintah-perintah itu dalam file terpisah berdasarkan fungsi sebagai konvensi:
Ini memiliki keuntungan tambahan untuk bekerja di luar kotak dan tidak mencemari lingkungan Anda.
sumber
README.md
atau membuat.md
file lain per topik dan mengarahkan mereka dari readme. Itu jika Anda memiliki antarmuka kontrol sumber ramah penurunan harga.Untuk mendapatkan file histori lokal untuk direktori, saya menambahkan baris berikut ke perintah bash prompt saya.
if [ -f .local_history ] ; then tail -1 $HISTFILE >> .local_history ; fi
Perintah
touch .local_history
dalam direktori kemudian memberi saya file sejarah lokal untuk semua perintah yang dieksekusi di direktori itu, tanpa kehilangan file sejarah utama. Sesuatu yang serupa akan bekerja di zsh kurasa.sumber
Dalam bash setidaknya, HISTFILE hanya dikonsultasikan pada awal contoh shell. Ide per-dir tidak akan berfungsi di sini, kecuali contoh 'workon' Anda di atas membuat instance shell.
Mungkin Anda bisa melihat sesuatu seperti
Tetapi skrip juga menciptakan subkulit.
Singkatnya, Anda mungkin perlu tingkat subkulit yang berantakan untuk membuatnya berfungsi.
sumber
Saya telah bekerja di rumah perangkat lunak produksi tempat kami baru saja membuat pengguna dan grup baru untuk berbagai fungsi. Akun pengguna baru khusus untuk manajemen konfigurasi atau perangkat lunak dibangun dengan berbagai tingkat visibilitas ke area fungsional terkait lainnya melalui keanggotaan grup dan ACL, dan riwayat perintah yang dilakukan oleh,
cmmgr
akan disimpan~cmmgr/.bash_history
,bldmgr
kata terkait akan disimpan~bldmgr/.bash_history
, dll. Sayangnya, untuk masuk, pengguna harus memiliki direktori login mereka. Oleh karena itu, area proyek diatur pada disk terpisah sama sekali. Kepemilikan pembuat file menunjukkan area fungsional mana yang membuat file di area proyek, yang sesuai.bash_history
dapat diperiksa.Pendekatan di atas, bagaimanapun, tidak memberi Anda rincian yang Anda inginkan, namun, itu memberi Anda kerangka bahwa ketika dikombinasikan dengan keanggotaan grup, pengguna dapat berganti grup
newgrp
yang secara efektif menciptakan shell dan lingkungan baru, dan kemudian menggunakan satu dari pendekatan yang diberikan dalam jawaban lain untuk mengubah~/.bash_history
file yang efektif ketika beralih topi untuk mengatakan,cmmgr
sehingganewgrp
dapat mengelola yang~/.bash_history
digunakan dan disimpan per folder sebagai salah satu masuk dan keluar dari grup baru melaluinewgrp
perintah. Lihatman newgrp
. Ada beberapa titik awal di sepanjang garis ini dalam jawaban lain untuk pertanyaan ini. Ini harus bekerja dengan paradigma grup UNIX - sebagian besar mur dan baut ditangani oleh startup shell dan keluar dari rutinitas sebagaimana dikendalikan olehnewgrp
doa. Lihatnewgrp -l
:sumber
Di sini saya menyajikan dua varian, tetapi hanya berlaku untuk Z Shell .
Varian 1
Inilah yang pertama kali saya pikirkan ketika membaca judul pertanyaan Anda. Dengan varian ini Anda dapat beralih antara dua mode riwayat dengan ALT+ h: Global atau lokal , di mana yang terakhir beralih ke riwayat per direktori secara otomatis pada chdir . Sejarah global mengakumulasikan semua perintah yang dikeluarkan.
Demonstrasi
Script (untuk dimasukkan
~/.zshrc
atau bersumber)Varian 2
Memikirkannya lagi, sepertinya sejarah per-dir terlalu baik dan Anda juga menggambarkan lebih banyak sejarah per-proyek di badan pertanyaan Anda. Jadi saya datang dengan varian lain dengan fungsi workon untuk beralih antar proyek. Setiap proyek memiliki file riwayatnya sendiri
~/.zsh_projhistory_[name]
.Demonstrasi
Script (untuk dimasukkan
~/.zshrc
atau bersumber)sumber
Setelah bekerja di satu area untuk sementara waktu.
histori> hist1.txt lalu nanti histori> hist2.txt
Terkadang saya menggunakan tanggal untuk nama file. history> hist20180727.txt
Dengan cara ini ada sejarah perintah terbaru untuk setiap direktori.
sumber