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 ftpnão seja usado acidentalmente. Mas eu notei que

ftp abcd.com

fará com que o comando faça eco

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

porque abcd.comé considerado um argumento para echo.

Existe uma maneira de fazer com que o Bash não seja adicionado abcd.comà substituição ou faça com que echonão seja considerado como argumentos extras? (Existe uma solução para cada abordagem?)

Eu deveria poder fazer isso

alias ftp='sftp'

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

falta de polaridade
fonte
3
Principalmente você pode proibir de ftpmaneira diferente, mas se você quiser fazer isso - use em printfvez de echo:printf "Do not use ftp. Use sftp instead.\n\c"
Costas
Adicionar echoao sftpalias? ie alias ftp='echo "Do not use ftp"; sftp'. Você receberá o lembrete e também será forçado a usá-lo sftp.
27414 Josh Jolly
@JoshJolly Eu queria fazer o comando de parar todos juntos em vez de deixá-lo para "navegar através de" apenas para que eu possa ser lembrado constantemente de não usarftp
nonopolarity
1
Observe que os aliases são extremamente simples; elas nada mais são do que simples substituição de cadeia de caracteres (com as limitações adicionais de que (1) a substituição ocorre apenas no início da cadeia de comando e (2) não é recursiva). Não há como "configurar" como um alias funciona além da definição do próprio alias.
Kyle Strand
Er ... desculpe, os apelidos são recursivos. Não tenho certeza do que estava pensando.
Kyle Strand

Respostas:

18

Quando você define um alias, o comando que você define é executado em vez do 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 printfcomo sugerido por Costas:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"
terdon
fonte
16
alias ftp='echo do not use ftp. Use sftp instead. # '
Hauke ​​Laging
fonte
7
+1. No entanto, de alguma forma, isso me lembra as injeções de SQL: ') Doce truque.
John WH Smith
9

Basta colocar um espaço e o caractere de comentário #no final da sequência 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, #caso contrário ele não será interpretado como um token separado após a expansão do alias.

pabouk
fonte