Defina sua função cdc como
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é a abreviação defor fn in "$@"; do. -
${fn##*/}analisa o valor de$fne remove tudo desde o começo até (e incluindo) o último/. Ou seja, se$fnfor um nome de caminho completo, essa será apenas a parte do nome do arquivo. -
[[ (the_above) == .* ]]cheques se o nome do arquivo corresponde ao padrão.*glob / curinga; ou seja, se o nome do arquivo começa com.. Observe que esse uso de==funciona somente dentro de[[ … ]]; não funciona dentro de[ … ]. -
Então, se
$fnfor um "arquivo de ponto", executesource-highlightcom a opção--src-lang=sh.- Você deve sempre colocar referências de variáveis de shell entre aspas duplas
a menos que você tenha uma boa razão para não
e você tem certeza de que sabe o que está fazendo.
Nomes de arquivos Unix / Linux podem conter espaços.
Se você tivesse um arquivo chamado
foo bare dissesse/bin/cat "foo bar",catexibiria o conteúdo do arquivofoo bar. Mas, se você dissecdc "foo bar"(com a versão atual da sua funçãocdc), você executariasource-highlightcom-i foo bar, que procuraria por um arquivo chamadofooe geralmente faria uma bagunça das coisas. E assim, ele falharia, e sua função tentaria/bin/cat foo bar, que também falhará. Usar"$fn"faz esse trabalho para nomes de arquivos que contêm espaços. - O programa
cprequer que você especifique, na lista de argumentos, o nome do arquivo ou diretório para o qual você deseja gravar. Esta é uma das poucas exceções à regra de que a maioria dos programas gravar na saída padrão por padrão (a menos que você especifique de outra forma). Você não precisa dizer-o STDOUTe gostaria de saber por que o (s) autor (es) do programa tornou possível que você especificasse isso.
E, sim, percebo que você acabou de copiar tudo isso da resposta à sua outra pergunta.
- Você deve sempre colocar referências de variáveis de shell entre aspas duplas
a menos que você tenha uma boa razão para não
e você tem certeza de que sabe o que está fazendo.
Nomes de arquivos Unix / Linux podem conter espaços.
Se você tivesse um arquivo chamado
- Obviamente, se
$fnnão for um arquivo de ponto, basta executarsource-highlightda maneira normal e verificar se há uma extensão. - Observe que
2> /dev/nulle|| /bin/cat "$fn"podem ser feitos para o blocoif … then … else … fina sua totalidade; eles não precisam ser repetidos para cada filial.
Hmm. Minha versão de source-highlight (3.1.7)
tem uma opção --src-lang=LANGUAGE
( -s LANGUAGE , como usado por yaegashi, para breve).
Acabei de perceber que não está no excerto da página source-highlight man
você incluiu na sua pergunta. Então, obviamente
se sua versão de source-highlight não suportar essa opção,
minha resposta não vai funcionar para você. (E, claro, nem o yaegashi.)
Se esse for o caso, você deve ver se consegue instalar a versão 3.1.7
(ou compatível) de source-highlight .

