Katakanlah saya punya perintah git branch
(selalu dengan beberapa kata) misalnya.
Yang saya inginkan adalah melacak kapan perintah ini dijalankan dengan argumen. Misalnya, jika saya menjalankan perintah git branch develop
tanpa kesalahan, saya ingin menyimpan develop
pada file.
Saya mencoba untuk menimpa perintah git pada saya .bash_profile
, sesuatu seperti ini:
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
Namun sepertinya itu tidak berfungsi dengan baik. Apakah ada cara untuk melakukan ini?
Jawaban:
Anda punya beberapa masalah di sini:
git
fungsi Anda menyebut dirinya secara rekursif bukangit
perintah asli .$@
kutip yang tidak masuk akal sama sekaliecho
data sewenang-wenang .git
perintah asli .~/.bash_profile
yang dimaksudkan untuk menyesuaikan sesi login Anda, bukan shell Anda dan biasanya tidak dibaca olehbash
permintaan non-login .Anda menginginkan sesuatu seperti:
Itu adalah:
command
untuk menjalankangit
perintah ,git
dalam variabel lokal dan mengembalikannya saat keluar,>>
alih-alih>
untuk pengalihan ke file log.printf
sebagai gantiecho
.~/.bashrc
sebagai gantinya (pastikan~/.bash_profile
sumber Anda adalah shell~/.bashrc
loginbash
tidak membaca~/.bashrc
secara default (bash
bug / misfeature)). Kecuali jika Anda ingin mengeksporgit
fungsi itu (denganexport -f git
) jika Anda juga inginbash
skrip yang memanggilgit
untuk memanggil fungsi itu.sumber
[ "$#" -eq 2 ]
, sesuai dengan contohnya. Dan itu bisa menjadi ide yang baik untuk menambahkan tanggal ke "tacked_parameters.txt". Dan saya akan memilih kasus umum (yaitu, tidak hanya melacak parameter ke-2 ketika 2 parameter, tetapi melacak parameter apa pun): Saya akan menyingkirkan if, dan memilikiprintf '%s: %s\n' "$(date '+%Y-%m-%dT%H:%M:%S')" "$0 $*"
:? (yaitu, tunjukkan perintah + semua parameter (perhatikan bahwa Anda masih kehilangan beberapa info, misalnya parameter mana yang memiliki intra-separator, jika ada). Tanggal portabel dekat dengan standar iso8601)