Saya memiliki satu aliasset untuk rmperintah saya . Jika saya menjalankan aliasperintah, inilah yang saya dapatkan sebagai output.
alias rm='rm -i'
Sekarang, ketika saya menjalankan rmperintah 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 straceperintah 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 rmperintah saya . Menghapus file tanpa meminta pengguna.
Jadi, apakah straceabaikan alias seperti ini? Jika demikian mengapa demikian?
EDIT:
Tidak yakin, apakah ini ada hubungannya tetapi type -a rmmemberi saya output sebagai,
rm is aliased to `rm -i'
rm is /bin/rm
Jadi apakah itu mempertimbangkan /bin/rmdalam kasus ini yang mengapa pengguna tidak diminta sebelum dihapus?
stracealias, Anda harus ke straceshell, yang mengimplementasikan alias. Ada beberapa pendekatan yang dapat Anda ambil untuk melakukan itu: strace -p $$ &atau strace bashatau strace sh -c 'rm ramesh'(yang terakhir juga akan mengabaikan alias, tetapi untuk alasan yang sama sekali berbeda.)
stracetidak mengabaikan alias, karena itu akan menyiratkan ada sesuatu yang diabaikan pada awalnya. Alias adalah fitur shell.straceadalah program yang berbeda, dan distracedalam 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.