空の文字列をエイリアスできますか?

空の文字列をエイリアスできますか?

bash では、ヌル コマンドを何かにエイリアスできますか? つまり、ユーザーがシェル プロンプトでキーだけを押したことを認識できますか? たとえば、空のシェル エントリで画面をクリアする場合、 をコマンドにエイリアスするにはEnterどうすればよいでしょうか?Enterclear

答え1

空のコマンドを何かに(効果的に)エイリアスする方法は次のとおりです。

以下の内容を に入力します.bashrc

command1()
{
    if [ "$BASH_COMMAND" != command2 ]
    then
        command_flag=1
    fi
    return 0
}
trap command1 debug
command2()
{
    if [ ! "$command_flag" ]
    then
        echo "clear"                            # Put whatever command(s) you want here.
    fi
    command_flag=
}
PROMPT_COMMAND=command2

必要に応じて、およびcommand1を、command2ランダムに入力する可能性が低い単語に一貫して置き換えます。

  • trap command1 debugcommand1ユーザーがコマンドを入力するたびに関数が実行されます 。
    • 実行された最新のコマンドが でなかった場合はcommand2command1設定されますcommand_flag
  • command2に割り当てると、シェルがプロンプトを発行しようとするたびに が実行されるよう PROMPT_COMMAND になります。command2
    • command_flag空白以外の値の場合は、command1実行されたばかりであり、ユーザーがコマンドを実行したばかりであることを意味します。この場合は何も行いません。
    • もしcommand_flagそうならない空白以外の値がある場合、ユーザーは を押したことになりますEnter。この場合、必要な操作を実行します (例: 画面をクリアする)。
    • どちらの場合もcommand_flag空白に設定すると、次のサイクルですべてが機能します。

注: これは bash 固有のものであることは間違いありません (つまり、POSIX ではサポートされていません)。

この回答は基本的に私の回答からコピーしたものですbash でコマンドの後に垂直スペースを追加する参照PROMPT_COMMAND の最後のコマンドが空であったかどうかを通知します。 他のアプローチについては。

答え2

TL;DR: は、Ctrl-l文字を印刷したり Enter キーを押したりせずに画面をクリアします。これはおそらく、必要な機能に最も近いものでしょう。コマンドを各コマンドの前または後に実行したり、1 つの文字のエイリアスを作成したりできます。空の文字列をエイリアスにすることはできません。

エイリアスは、必ずしも 1 行にすべて入力されるように設計されているわけではありません。

alias ll='ls -l'

は良い例です。実行すれll /path/to/other/dirば結果を得ることができます。

エイリアスが行うことは、コマンドラインに入力された最初の単語を、指定した値に変更することだけです。

エイリアスが機能するための唯一の要件は、その後に非表示文字 (スペース/タブ/改行) が続く必要があることです。この場合、ll自体は有効ですが、ll-/mypath/別のコマンドの開始となる可能性のあるいくつかの文字をエイリアス化できる (そして頻繁に行われる) ため、有効ではありません (つまり、 はalias gi='git init'のみを正確に解決できgi、 は解決できませんgit。これはほとんどの人が望み、期待していることです)。

空の文字列にエイリアスを付けることはできません。コマンドライン入力。

コマンドを毎回実行したい場合は、PS0(bash の最新バージョンを前提としています) を使用して、各コマンドの前に何かを実行したり、PROMPT_COMMAND各コマンドの後に何かを実行したりできます。例:

PROMPT_COMMAND='echo $?'

実行するコマンドごとに、実行したコマンドの戻り値がエコーされます。

Bash には、コマンド ラインに空の行を入力した場合にのみ、アクションを完了する適切な方法がありません。この点では、Bash は空白を区別しません。

関連情報