보통 이런 파일을 캡쳐할 때
색칠하지 않고는 읽기가 어렵습니다.
나는 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
에서는 매개변수 목록에 기록할 파일이나 디렉터리의 이름을 지정해야 합니다. 이는 대부분의 프로그램이 기본적으로 (달리 지정하지 않는 한) 표준 출력에 기록하는 규칙에 대한 몇 가지 예외 중 하나입니다. 그렇게 말할 필요는 없고-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 -*-
(첫 번째 줄일 필요는 없음) 과 같은 주석을 추가합니다.
자세히보다입력 언어를 찾는 방법소스 하이라이트 매뉴얼에서.