Mengapa melarikan diri karakter sepele dalam skrip shell?

23

Saya baru saja membuka skrip shell warisan (ditulis dalam ksh88 lama di Solaris) dan menemukan yang berikut ini berulang di seluruh kode:

[ -f $myfile ] && \rm -f $myfile

Backslash yang melarikan diri menurut saya aneh.

Saya tahu ini disengaja, karena melarikan diri semacam ini (tampaknya tidak berguna) diulangi di seluruh kode. Penulis aslinya sudah lama hilang, saya tidak bisa menghubunginya untuk memintanya.

Apakah ini hanya keanehan lucu dari penulis atau itu semacam praktik baik yang sudah ketinggalan zaman yang masuk akal di beberapa titik waktu? Atau mungkin sebenarnya cara yang disarankan untuk melakukan sesuatu dan saya kehilangan sesuatu sama sekali?

rahmu
sumber
3
Meskipun ada alasan bagus untuk itu, memberikan perlindungan alias dalam skrip menggunakan metode ini bukan yang saya sebut "disarankan." Akan cukup untuk menghapus alias di bagian atas skrip, atau untuk memanggil rmdengan path lengkap.
Sorpigal

Jawaban:

25

Ini digunakan untuk perlindungan alias:

$ ls
.bashrc  a  b

$ alias ls
alias ls='ls $LS_OPTIONS'

$ \ls
a   b
Ansgar Esztermann
sumber
5

Pada umumnya merupakan praktik yang baik untuk melemparkan beberapa perlindungan untuk rm, yang biasanya dicapai dengan aliasing. Di lingkungan multi-pengguna, Anda akan sering melihat banyak perlindungan ini ada di tempatnya.

Untuk seorang praktisi scripting shell, seringkali berguna bagi seseorang untuk menonaktifkan perlindungan ini karena mungkin, mereka tahu apa yang mereka lakukan. Ini, seperti yang disebutkan, dilakukan dengan mengawali perintah dengan a \.

Bertolak belakang dengan saran @ Sorpigal, saya pasti akan menyarankan untuk tidak membuka alias, jangan sampai skrip gagal memberikan pengguna kembali perlindungan mereka. Lebih lanjut, menggunakan lintasan lengkap juga tidak bijaksana karena rm mungkin ada di lintasan bantu karena suatu alasan - yaitu GNU rm vs BSD rm. Mengesampingkannya dengan jalur yang ketat berarti mengalahkan tujuan memiliki PATH, yaitu untuk meningkatkan skala dan menangani banyak arsitektur, lingkungan, dan pengguna.

fimbulvetr
sumber
3
Meskipun umum, alias rmbukanlah praktik yang baik tetapi cukup buruk dan tidak menguntungkan.
jlliagre