ここで仕事をするためbashスクリプトです:
#!/bin/bash
num_lines=$(git diff | wc -l)
if [ $num_lines -eq 0 ]
then
echo "No changes"
else
git diff --color=always | less --raw-control-chars
fi
それとも、ここでもともと@Phillip's commentに基づいてワンライナーが@tripleeeのおかげで、いくつかの修正で、です:
git diff --color=always | (IFS=$'\n' read -r A; if [ -n "$A" ]; then (printf '%s\n' "$A"; cat) | less --raw-control-chars; else echo "No changes"; fi)
1 -linerには、パフォーマンスを向上させるために一度だけgit diff
を実行する利点があります。
@tripleee's commentあたりのいくつかの説明:あなたが適切に意図せずに最初の行をマングルしないようにread -r
を使用する必要があります
。これは、先頭または末尾の空白をまだmangleします。 で修正することができます。read -r
より前に修正してください。 echo
は、最初の行がダッシュ(オプションの引数のようにecho
のように見えます)で始まっていれば間違った動作をするかもしれません。代わりにprintf '%s\n' "$A"
を使用してください。どちらの場合も
、less
に渡さ--raw-control-chars
オプション(ショートバージョン-r
)は、色が正しく表示するようになります。
はあなたを行いますどこかに '.lessrc'ファイルがありますか? 'less'はデフォルトでは自動的には存在しません。 (例えば、 '-e'と' -E'のオプションは 'less'になります) – chepner
上記のコメントを無視し、私の答えを見てください。私は環境変数を設定して、「less」が早期に終了するのを防ぎます。 – chepner