簡體   English   中英

使用終端歷史記錄時,在執行歷史記錄中的危險命令時是否可以強制確認?

[英]When using the terminal history, can I force confirmation when executing dangerous commands from my history?

我的終端工作流程涉及使用UPUPRETURN導航bash歷史記錄。 有時我會忘記或錯誤輸入UP的數量並調用錯誤的命令。 有時可能會有些痛苦( git clone )或相當痛苦( git push )。 有一天,我確定我會做非常痛苦的事情。

因此,我避免使用某些有用但潛在危險的命令。 可以避免將這些命令添加到我的歷史記錄中 ,但是我喜歡我的歷史記錄。

我想將某些命令(或正則表達式測試)列入黑名單,因此,如果我使用歷史記錄來調用它們,則在執行之前需要進行確認:

$ git status
$ rm -rf node_modules # typed - no confirmation
$ rm -rf node_modules # UP, RETURN - confirmation
Blacklisted command - Are you sure? (yes/no)?

使用函數作為命令包裝

Shell不直接支持此功能,部分原因是命令在執行之前已存儲在歷史記錄中。 但是,通過將“危險”命令包裝在優先於實際命令的函數中,可以在很大程度上偽造它。 例如:

rm () {
    local regex='[Yy]'
    if history |  sed '$d' | pcregrep -q "^\s+\d+\s+${FUNCNAME} $*"; then
        read -p 'Are you sure? '
        [[ "$REPLY" =~ $regex ]] || return 1
    fi
    command "$FUNCNAME" "$@"
}

秘密之處在於sed命令,它會刪除剛剛存儲在歷史記錄中的當前命令。 否則,grep將始終在歷史記錄中找到該命令。

注意事項

  1. 請注意使用PCRE支持編譯的grep的要求。 如果您沒有使用PCRE支持編譯的pcregrep或egrep,則需要調整正則表達式。
  2. 如果未按照您認為的方式進行分詞,則可能還需要調整報價或使用eval,但在臨時測試中對我來說效果很好。 你的旅費可能會改變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM