no Bash, como não incluir argumentos extras em um alias?

10

Estou tentando fazer algo como

alias ftp='echo do not use ftp. Use sftp instead.'

apenas para que ftp não seja usado acidentalmente. Mas notei que

ftp abcd.com

fará com que o comando faça eco

do not use ftp. Use sftp instead. abcd.com

porque o abcd.com é considerado um argumento para echo .

Existe uma maneira de fazer o Bash não adicionar abcd.com à substituição, ou fazer com que echo não o aceite como argumentos extras? (Existe uma solução para cada abordagem?)

Eu supus que poderia fazer isso

alias ftp='sftp'

mas eu só quero que o comando pare todos juntos para me lembrar de não usar ftp .

    
por 太極者無極而生 26.11.2014 / 11:53

3 respostas

17

Quando você define um alias, o comando definido é executado em vez daquele que você escreveu. Isso significa que quando você executa ftp abc.com , o que é realmente executado é

echo do not use ftp. Use sftp instead abc.com

Uma solução simples é usar uma função em vez de um alias:

ftp(){ echo 'do not use ftp. Use sftp instead'; }

Como alternativa, você pode usar printf como sugerido por Costas:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"
    
por 26.11.2014 / 12:09
16
alias ftp='echo do not use ftp. Use sftp instead. # '
    
por 26.11.2014 / 12:09
9

Basta colocar um espaço e o caractere de comentário # no final da string de alias:

alias ftp='echo do not use ftp. Use sftp instead. #'
ftp abcd.com
do not use ftp. Use sftp instead.

Isso fará com que os parâmetros sejam tratados como um comentário. Apenas não esqueça de adicionar um espaço antes de # caso contrário ele não será interpretado como um token separado após a expansão do alias.

    
por 26.11.2014 / 12:11