Criando aliases começando com + ou -

1

Na maioria das vezes, acho que estou fazendo:

% chmod +x <file> #or +r or +w

Então, pensei em criar um alias como:

% alias +x='chmod +x' # or
% alias \+x='chmod +x' # or
% alias '+x'='chmod +x'

mas resulta em:

zsh: bad option: -x

Existe algum outro método para criar o alias acima? Atualmente estou configurando-os como

% alias c+x='chmod +x'

que não é o que eu tinha em mente.

    
por hjpotter92 05.07.2016 / 21:09

1 resposta

3

A citação de + nesse contexto não tem efeito de efeito desejado porque apenas informa zle (editor de linha de comando do zsh ) para obter + literalmente. O comando alias propriamente dito ainda recebe a string "+ x" como primeiro argumento de linha de comando e, assim, tenta analisá-lo como opção.

Se você passar a opção -- para o comando alias , tudo depois dela será usado como argumento, mesmo que comece com + ou - . Para usar seu exemplo:

alias -- +x='chmod +x'
alias -- -x='chmod -x'

Nota: Muitas - mas não todas - outras ferramentas se comportam de maneira semelhante, zsh built-ins e comandos externos. Por exemplo:

% touch -negative
touch: invalid option -- 'n'
Try 'touch --help' for more information.
% touch -- -negative
% ls -negative
ls: invalid option -- 'e'
Try 'ls --help' for more information.
% ls -- -negative   
-negative
% rm -negative
rm: invalid option -- 'n'
Try 'rm ./-negative' to remove the file '-negative'.
Try 'rm --help' for more information.
% rm -- -negative 

Claro, você também pode fazer como rm sugere e usar ./-negative na maioria (todos?) desses casos em que os caminhos estão envolvidos.

Uma exceção notável é o% GNUecho. É difícil conseguir imprimir qualquer opção que ele reconheça sem texto adicional. Por exemplo "-n":

% /bin/echo -n
% /bin/echo -- -n
-- -n
% /bin/echo -n -e '-n\n'
-n
    
por 06.07.2016 / 00:16

Tags