1

私は最近、zsh の preexec() および precmd() 関数について知り、シェルからもう少し機能を絞り出す斬新な方法を思いつきました。

この prexec() 関数は、実行しようとした「コマンド」が「http」で始まり「.git」で終わるかどうかを確認します。そうであれば、自動的にソース ディレクトリに移動し、ソースをチェックアウトします。だから私はそれを貼り付けてEnterキーを押すだけで、レースに出かけます。それ以外の場合、正常 (またはエラー) は正常に見えるはずです。

function preexec() {
  [[ "$1" =~ "^http.*.git\$" ]] && cd /usr/local/src && git clone "$1"
}

今困っているのは、表示される「コマンドが見つかりませんでした」というエラーを無視または上書きする方法がないように見えることです。

zsh: そのようなファイルやディレクトリはありません: https://github.com/someproject.git

'1'、ZLE_LINE_ABORTED、2>&1 をめくって、1、0 を返し、noglob を使用して上書きしようとしました。

エラーメッセージを抑制する方法を知っているzshの賢い人はいますか?

4

1 に答える 1

2

正しい答えは、pre* 関数を使用せず、代わりに command_not_found_handler 関数を使用することです。これは、新しいバージョンの bash でも機能するはずです。

@chepner と @"Jan Krüger" は、この問題を解決するために尽力してくれました。

function command_not_found_handle {
        if [[ "$1" =~ "^(https|http|git|(git\\+)?ssh)://.*\$" ]]; then
                echo "Do something: $1"
                return 1
        else
                return 0
        fi
}
于 2013-11-21T17:26:36.463 に答える