通常、これらのファイルをキャプチャするとき
着色しないと読みにくいです。
私はcat
次のようにソースハイライトを使用しました。
cdc() {
for fn in "$@"; do
source-highlight --out-format=esc -o STDOUT -i $fn 2>/dev/null || /bin/cat $fn
done; }; alias cat='cdc'
これで、認識されたファイル拡張子(この場合は.sh)に対して次のように生成されます。
ただし、.shがない場合、たとえばそのファイルを呼び出すと、.bash_functions
色付けは行われません。ファイル拡張子がわからないからです。
color-highlight
カラードットファイル(ドットで始まるファイル)をカラーで取得する方法はありますかsh
?
ちなみに、これはベースで作られました。未知のファイル形式を含む猫の出力を白黒で色付けする方法は?
man source-higlight
以下が表示されますが、どうすればいいかわかりません。
...
--outlang-def=filename
output language definition file
--outlang-map=filename
output language map file (default=`outlang.map')
--data-dir=path
directory where language definition files and language maps are searched for. If not specified
these files are searched for in the current directory and in the data dir installation directory
--output-dir=path
output directory
--lang-def=filename
language definition file
--lang-map=filename
language map file (default=`lang.map')
--show-lang-elements=filename
prints the language elements that are defined
in the language definition file
--infer-lang
force to infer source script language (overriding given language specification)
答え1
-s sh
$fn
ドットファイルのように見える場合にのみ指定されます。
cdc() {
for fn in "$@"; do
OPTIONS="-f esc"
case "${fn##*/}" in
.*) OPTIONS="$OPTIONS -s sh" ;;
esac
source-highlight $OPTIONS -i "$fn" 2>/dev/null || \cat "$fn"
done
}
alias cat=cdc
で追加のカスタムファイル名一致規則を追加できますcase
。
答え2
八重ヶ市の考えが正しい、たとえ私はそうしますが:
cdc() {
for path
do
command=(source-highlight --out-format=esc -o STDOUT --failsafe)
case "${path##*/}" in
.*) command+=(-s sh)
;;
esac
"${command[@]}" -i "$path"
done
}
--failsafe
cat
言語を検出できないかのように動作します。すべてのエラーを無視するよりもはるかに優れています。- 使うコマンドパラメータ配列
答え3
cdc
機能を次のように定義します。
cdc() {
for fn do
if [[ "${fn##*/}" == .* ]]
then
source-highlight --src-lang=sh --out-format=esc -i "$fn"
else
source-highlight --out-format=esc -i "$fn"
fi 2> /dev/null || /bin/cat "$fn"
done
}
for fn do
うん、短縮for fn in "$@"; do
。${fn##*/}
値を確認$fn
し、最初から最後の項目まですべての項目を削除します/
。つまり、$fn
フルパス名の場合、これはファイル名部分にすぎません。[[ (the_above) == .* ]]
ファイル名が.*
glob/wildcardパターンと一致することを確認してください。つまり、ファイル名が次から始まることを確認してください。.
。この使用法は==
内部でのみ機能し、[[ … ]]
内部には影響しません[ … ]
。したがって、
$fn
「ドットファイル」の場合は、source-highlight
その--src-lang=sh
オプションを使用して実行してください。- そうしない妥当な理由がなく、実行中の作業を確実に知っていない限り、必ずシェル変数参照を二重引用符で囲む必要があります。 Unix/Linux ファイル名にはスペースを含めることができます。名前の付いたファイルがあり、そうすると、
foo bar
そのファイルの内容が表示されます。しかし、(現在のバージョンの関数を使用して) with で実行すると言うと、名前付きファイルを見つけて一般的に問題を引き起こします。だからそれは失敗し、あなたの関数も試してみて、それも失敗します。これを使用すると、スペースを含むファイル名に対してこの方法が機能します。/bin/cat "foo bar"
cat
foo bar
cdc "foo bar"
cdc
source-highlight
-i foo bar
foo
/bin/cat foo bar
"$fn"
- プログラム
cp
では、パラメータリストに書き込むファイルまたはディレクトリの名前を指定する必要があります。これは、ほとんどのプログラムがデフォルトで(特に指定しない限り)標準出力に書き込むルールに関するいくつかの例外の1つです。そう言う必要はなく-o STDOUT
、プログラム作成者がなぜこれを指定できるようにしたのか気になります。
はい、回答から他の質問まですべての内容をコピーしたことがわかります。
- そうしない妥当な理由がなく、実行中の作業を確実に知っていない限り、必ずシェル変数参照を二重引用符で囲む必要があります。 Unix/Linux ファイル名にはスペースを含めることができます。名前の付いたファイルがあり、そうすると、
- 明らかに
$fn
ドットファイルではない場合は、source-highlight
通常の方法で実行して拡張子を確認してください。 - と
2> /dev/null
はブロック全体に対して実行でき、各ブランチに対して繰り返す必要はありません。|| /bin/cat "$fn"
if … then … else … fi
よく。私のバージョンsource-highlight
(3.1.7)にはオプション(省略してyaegashiという)があります。私はあなたの質問に含まれているマニュアルページの抜粋にその内容がないことがわかりました。したがって、あなたのバージョンがそのオプションをサポートしていない場合、私の答えはあなたには適していません。 (もちろんyaegashiも同様です。)この場合、バージョン3.1.7(または互換バージョン)をインストールできることを確認する必要があります。--src-lang=LANGUAGE
-s LANGUAGE
source-highlight
source-highlight
source-highlight
答え4
ファイル拡張子を表示することに加えて、ソースハイライトには言語を検出するいくつかの異なる方法があります。次のようにシェルスクリプトファイルに注釈を付けることができます。
- shabang行:
#!/bin/sh
または#!/bin/bash
ファイルの最初の行に入れます。 # -*- shell -*-
Emacsスタイルのファイルタイプコメント:ファイルにor# -*- bash -*-
(最初の行を減らす必要はありません)などのコメントを追加します。
もっと入力言語を見つける方法ソースハイライトマニュアルから。