プロンプト内のコマンドの後に区切り文字を挿入することは可能ですか? 次に例を示します。
~/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
。これにより、スクリプトの出力が読みやすくなります。