`alias rm="rm -i"` 被認為有害嗎?

`alias rm="rm -i"` 被認為有害嗎?

我前段時間讀過(找不到參考資料),使用這樣的別名 asalias rm="rm -i"非常糟糕。

這個事實有歷史證據或常識解釋嗎?

我想這會讓用戶養成依賴確認提示來檢查命令的壞習慣,如果他在另一個沒有別名的設定檔上這樣做,可能會導致災難。

答案1

你說得對。

這很糟糕,因為你已經習慣了。如果您使用的系統沒有它,並且您rm,它會立即開始刪除,您想知道發生了什麼。

許多使用者習慣透過 SSH 連接到不同的系統;因此,使用許多不同的系統,有時沒有設定個人化的使用者帳戶(包括別名)是很常見的。

相反,使用egalias rmi='rm -i'並學習使用那個。如果未在其他系統上進行設置,則您不會意外刪除文件,並且始終可以回退到鍵入完整命令。

答案2

就像@Daniel 所說,它本身並沒有什麼害處,除了訓練你期望它在那裡之外。事實上,它是 CentOS(我想還有 RHEL 的擴展——我已經很久沒有使用過它了)機器上的預設設置,肚臍處非常疼痛。在那次演出的剩餘時間裡,我輸入 /bin/rm 以避免「Linux for people who Should not have root access」設定。

答案3

我認為最大的危險是人們可能依賴這樣的東西來過濾全局。想像一下您想要從目錄中刪除一些圖像,但不是全部:

rm -i pics/*.jpg

您可以使用它來手動過濾全局,這是完全合理的。但是,如果您給它起了別名並正在使用rm,並且碰巧進入了一個沒有該別名的 shell 並嘗試它......您剛剛刪除了所有圖片,哎呀!

就我個人而言,我也發現這個別名對我的血壓有害;)。但這只是我。

答案4

這是很多根據我過去與數百名用戶合作的經驗,危害較小:

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • 使用者經過培訓,可以正確使用通配符,而不僅僅是“*”,然後根據 y/n 提示來選擇文件
  • rm當它們在缺少此函數或別名的其他上下文中使用時,使用正確通配符的條件通常可以避免災難rm -i
  • 當使用者多次輸入“y”時,我花費更少的時間來恢復文件
  • 用戶只需回應一次 - 為他們的使用提供尖銳的積極反饋
  • Control-c 中斷工作並報告為不執行任何操作
  • 不是腳本,所以真實的內容rm沒有受到影響,其他節目也不會受到影響。

程式碼風格大部分與 sh 相容(除了用於echo .... | tr -d '\012'bash 之前的 shell),請隨意讓您自己的程式碼風格更加特定於 bash。我發文不是為了分享程式碼本身,而是為了分享使用者體驗隨之而來的改變。

相關內容