“dircolors” funcionará aqui ao invés de “eval '” dircolors' “'”?

1

Eu estava checando o .bashrc para definir cores para o comando ls e achei isso ...

export SHELL='/bin/bash'
 export LS_OPTIONS='--color=auto'
 eval "'dircolors'"
 alias ls='ls $LS_OPTIONS'

Haverá algum problema se eu usar dircolors em vez de usá-lo com eval ? Qual é a diferença?     
por Abinash Dash 01.03.2018 / 12:36

1 resposta

2

Nem eval dircolors nem dircolors funcionarão.

O que você precisa é:

eval "$(dircolors)"

(ou a antiga forma eval "'dircolors'" )

Ou seja, você precisa avaliar a saída de dircolors . dircolors gera o código a ser avaliado pelo shell como:

LS_COLORS='...'
export LS_COLORS

Esse é o código que você deseja avaliar. eval dircolors é igual a dircolors , portanto, ele só executará dircolors com sua saída não redirecionada, de modo que o código de shell acima acabará sendo exibido e não será avaliado por nenhum shell.

Além disso, se $LS_OPTIONS tiver uma lista de opções de ls na sintaxe do shell, por exemplo, aceitando itens como --exclude='*~' , será necessário defini-lo como:

ls() {
  eval 'command ls '"$LS_OPTIONS"' "$@"'
}

Ou com zsh :

alias ls='ls "${(Q@)${(z)LS_OPTIONS}}"'

Se é para conter uma lista de opções separadas por espaços, com o bash 4.4 +

ls() {
  local IFS=' '
  local -
  set -o noglob
  command ls $LS_OPTIONS "$@"
}

Ou com zsh :

alias ls='ls ${(s: :)LS_OPTIONS}'
    
por 01.03.2018 / 12:39

Tags