プロンプトでコマンドを折り返す

プロンプトでコマンドを折り返す

プロンプト内のコマンドの後に区切り文字を挿入することは可能ですか? 次に例を示します。

~/Desktop: ls -al
-------------------------------------
total 80
drwx------+  6 eddie  staff   204B Apr 29 16:57 .
drwxr-xr-x+ 54 eddie  staff   1.8K Apr 30 10:54 ..

~/Desktop:

具体的には、コマンドを発行した後に---------の部分を追加して、コマンドと結果を区別しやすくしたい。

答え1

zshではフック関数を定義できるpreexecすべてのコマンドが実行される前に、指定された文字列をエコーし​​ます。

bash では、DEBUGトラップを使用して preexec フックを設定し、同じことを行うことができます。

preexec() 関数は次のように定義します。

preexec () { echo "-------------------------------"; }
preexec_invoke_exec () {
    [ -n "$COMP_LINE" ] && return  # do nothing if completing
    preexec
}
trap 'preexec_invoke_exec' DEBUG

詳細は以下をご覧くださいbash にはコマンドを実行する前に実行されるフックがありますか?

ただし、これはすべてのバージョンのbashで動作するとは思えません。私の古いUbuntuサーバーでは、bash 3.2.39(1)を実行していてhelp trap

SIGNAL_SPECがDEBUGの場合、ARGが実行されるすべての簡単なコマンド。

別のサーバーでは、bash 4.1.2(1)を実行すると、

SIGNAL_SPECがDEBUGの場合、ARGが実行される前にすべての簡単なコマンド。

これが必要なことです。したがって、bashのバージョンでhelp trap前にすべての簡単なコマンド。」

答え2

シェルに bash または ksh を使用している場合は、次のようにドットファイル (.profile、.bash_profile など) の 1 つに関数を作成できます。

function hr {
    echo "--------------------------------------------------------------------------------"
}

&&その後、 または コマンド区切り文字として使用して、その区切り文字が必要なときはいつでもコマンドの先頭に追加できます;。次のようにします。

bash-[534]$ hr && ls
--------------------------------------------------------------------------------
ddtool_23.jnlp  prtconf-pv

または

bash-[536]$ hr ; ls -la
--------------------------------------------------------------------------------
total 36K
drwxr-xr-x  2 tim staff    4 2012-12-06 15:02 ./
drwxr-xr-x 46 tim staff  134 2013-04-30 14:59 ../
-rw-------  1 tim staff 2.7K 2012-12-06 15:00 ddtool_23.jnlp
-rw-r--r--  1 tim staff  24K 2012-12-06 15:02 prtconf-pv

私はこれを実行します。さらに、より太いセパレーターを印刷する 2 番目の関数もあります。

function hr2 {
    echo "================================================================================"
}

hr2私はシェル スクリプトでこれらの関数をよく使用して、メイン タスク間やループ ステートメント内の項目間など、スクリプトのさまざまな部分を分離しますhr。これにより、スクリプトの出力が読みやすくなります。

関連情報