en Bash, ¿cómo no incluir argumentos adicionales en un alias?

10

Estoy tratando de hacer algo como

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

solo para que ftpno se use accidentalmente. Pero me di cuenta de que

ftp abcd.com

hará que el comando haga eco

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

porque abcd.comse considera que es un argumento a favor echo.

¿Hay alguna manera de hacer que Bash no agregue abcd.coma la sustitución, o hacer que echono lo tome como argumentos adicionales? (¿Hay una solución para cada enfoque?)

Supuse que podría hacerlo

alias ftp='sftp'

pero solo quiero hacer que el comando se detenga por completo para recordarme que no debo usar ftp.

nonopolaridad
fuente
3
En su mayoría, puede prohibir ftpde otra manera, pero si desea hacerlo, use en printflugar de echo:printf "Do not use ftp. Use sftp instead.\n\c"
Costas
Añadir echoel sftpalias? es decir alias ftp='echo "Do not use ftp"; sftp'. Obtendrá el recordatorio, a la vez que se verá obligado a usarlo sftp.
Josh Jolly
@JoshJolly Quería hacer la orden de parar todos juntos en lugar de dejar que "navegue" solo para que se me recuerde constantemente que no lo useftp
polaridad
1
Tenga en cuenta que los alias son extremadamente simples; no son más que una simple sustitución de cadena (con las limitaciones adicionales de que (1) la sustitución solo ocurre al comienzo de la cadena de comando y (2) no es recursiva). No hay forma de "configurar" cómo funciona un alias más allá de la definición del alias en sí.
Kyle Strand
Er ... lo siento, los alias son recursivos. No estoy seguro de lo que estaba pensando.
Kyle Strand

Respuestas:

18

Cuando define un alias, el comando que establece se ejecuta en lugar del que escribió. Esto significa que cuando ejecutas ftp abc.com, lo que realmente se ejecuta es

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

Una solución simple es usar una función en lugar de un alias:

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

Alternativamente, puede usar printfcomo lo sugiere Costas:

alias ftp="printf 'do not use ftp. Use sftp instead\n'"
terdon
fuente
16
alias ftp='echo do not use ftp. Use sftp instead. # '
Hauke ​​Laging
fuente
77
+1. Sin embargo, de alguna manera esto me recuerda a las inyecciones de SQL: ') Dulce truco.
John WH Smith
9

Simplemente ponga un espacio y el carácter de comentario #al final de la cadena de alias:

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

Esto hará que los parámetros se traten como un comentario. Simplemente no olvide agregar un espacio antes, de lo #contrario no se interpretará como un token separado después de la expansión del alias.

pabouk
fuente