
Quero ignorar ls
(omitir de sua saída) todo e qualquer nome de arquivo listado em um .hidden
arquivo.
Encontrei uma função bash que parece substituir ls
para fazer isso ...
ls () {
if [ -f .hidden ]; then
declare GLOBIGNORE="$GLOBIGNORE:.*:$(tr '\n' ':' < .hidden)"
ls "$@"
fi
}
...mas quando eu source .bashrc
retorno
-bash: .bashrc: line 121: syntax error near unexpected token `('
-bash: .bashrc: line 121: `ls () {'
Não consigo identificar o erro de sintaxe (fiz alguns scripts bash, mas a declare GLOBIGNORE
linha é estranha para mim). A linha 121 é apenas isso: ls () {
o que parece bom por si só.
Você vê um erro nesta função?
Existe outra abordagem que poderia ser usada?
atualizações:
Excluir alias ls='ls --color=auto'
from .bashrc
não resolve o unexpected token
erro. Seguindo o conselho, vamos abandonar essa abordagem usando globignore.
Quando @rkhff apontou o -I
(e --ignore=
), pensei em tentar algo assim (em uma função antes de colocar no bashrc)
PARAM=''
if [ -f .hidden ]; then
IGN=' -I '
while read p; do
$PARAM+=$IGN$p
#$PARAM="${PARAM}${IGN}${p}"
done < .hidden
fi
ls$PARAM
mas isso dá isso misteriosamente /home/alec/bin/ls.sh: line 7: +=: command not found
....por que não foi +=
encontrado? Não vi nenhum outro caso em minhas pesquisas na web em que o +=
operador resultasse em "comando não encontrado". A linha comentada apenas com =
também produz um erro de comando não encontrado. Alguém poderia dizer o que poderia estar causando isso?
Responder1
O erro é provavelmente porque você tem uma versão anteriorapelidodefinição para ls
. Para demonstrar:
$ alias foo='echo foobar'
$ foo
foobar
$ foo () { echo barfoo; }
-bash: syntax error near unexpected token `('
No entanto, não acho que você será capaz de fazer o que quiser GLOBIGNORE
, pois isso afeta apenas como oconchaexpande globs, e seu shell expandirá quaisquer expressões globantesseu ls
comando é invocado.
Pelo menos com a implementação do GNU Coreutils ls
, você poderá usar o -I
ou --ignore
switch ex.
hidls ()
{
declare -a args;
local pat;
local patfile=".hidden";
[[ -r $patfile ]] || {
command ls "$@";
return
};
while IFS= read -r pat; do
args+=("-I");
args+=("$pat");
done < "$patfile";
command ls "${args[@]}" "$@"
}
alias ls=hidls