Saya memiliki satu alias
set untuk rm
perintah saya . Jika saya menjalankan alias
perintah, inilah yang saya dapatkan sebagai output.
alias rm='rm -i'
Sekarang, ketika saya menjalankan rm
perintah itu berfungsi dengan baik seperti yang diharapkan.
rm ramesh
rm: remove regular empty file `ramesh'? y
Sekarang, saya sedang belajar tentang pemanggilan sistem yang dipanggil ketika saya menjalankan perintah. Untuk itu saya harus tahu tentang strace
perintah dari sini yang mencantumkan saya file yang dipanggil ketika saya menjalankan beberapa perintah. Perintahnya seperti di bawah ini.
strace -ff -e trace=file rm ramesh 2>&1
Perintah berfungsi dengan baik kecuali bahwa itu mengabaikan alias saya yang ada di tempat untuk rm
perintah saya . Menghapus file tanpa meminta pengguna.
Jadi, apakah strace
abaikan alias seperti ini? Jika demikian mengapa demikian?
EDIT:
Tidak yakin, apakah ini ada hubungannya tetapi type -a rm
memberi saya output sebagai,
rm is aliased to `rm -i'
rm is /bin/rm
Jadi apakah itu mempertimbangkan /bin/rm
dalam kasus ini yang mengapa pengguna tidak diminta sebelum dihapus?
strace
alias, Anda harus ke strace
shell, yang mengimplementasikan alias. Ada beberapa pendekatan yang dapat Anda ambil untuk melakukan itu: strace -p $$ &
atau strace bash
atau strace sh -c 'rm ramesh'
(yang terakhir juga akan mengabaikan alias, tetapi untuk alasan yang sama sekali berbeda.)
strace
tidak mengabaikan alias, karena itu akan menyiratkan ada sesuatu yang diabaikan pada awalnya. Alias adalah fitur shell.strace
adalah program yang berbeda, dan distrace
dalam konsep alias tidak ada, maka tidak ada yang perlu diabaikan. API yang disediakan oleh kernel untuk menjalankan program tidak memiliki konsep alias juga, jadi tidak ada cara shell dapat memberitahu strace tentang alias, bahkan jika itu mau.