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.


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'"


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.