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.


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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.