1 votos

Extraño problema con los alias para zsh

Estoy tratando de crear un alias en mi archivo .zshrc para una conexión SSH. El comando completo es este:

ssh -t pi@raspi5 "cd ~/C-progs/c_trials; exec \$SHELL -l"

El comando está diseñado para abrir una conexión SSH, hacer cd a un directorio elegido y luego iniciar un shell de inicio de sesión. Puedo ejecutar este comando perfectamente desde la línea de comandos de Terminal, y hace exactamente lo que se supone que debe hacer.

El comando es un poco difícil de recordar, así que decidí crear un alias para ello. Puse el alias en ~/.zshrc:

alias sshrp5="ssh -t pi@raspberrypi5 "cd ~/C-progs/c_trials; exec \$SHELL -l""

Lo cual es, según entiendo, la forma prescrita de crear un alias en zsh. Desafortunadamente, zsh aparentemente no le gusta este alias:

source ~/.zshrc

¡sourcear ~/.zshrc con el alias anterior en ella cierra inmediatamente la pestaña de Terminal desde la cual intenté el comando source! ¡Afortunadamente, tenía 3 pestañas abiertas, de lo contrario me habría quedado bloqueado en Terminal!

¿Alguien sabe qué he hecho para ofender al grande y poderoso zsh? :)

1voto

Las comillas dobles son complicadas. En tu caso, Zsh ve el final de la parte citada antes del cd y la definición del alias termina con el ;, por lo que zsh ve dos comandos en una línea aquí:

-- 1er comando --------------------------------------------  -- 2do comando --
alias sshrp5="ssh -t pi@raspberrypi5 "cd ~/C-progs/c_trials; exec \$SHELL -l""

Cuando se carga .zshrc, el shell define el alias como ssh -t pi@raspberrypi5 cd ~/C-progs/c_trials y luego intenta ejecutar exec \$SHELL -l. Como el $ está entre comillas, el binario a ejecutar se llama literalmente $SHELL (lo cual obviamente falla porque normalmente no existe ese binario). Un exec fallido no se puede recuperar, por lo que se te expulsa del shell.

$ zsh
% alias sshrp5="ssh -t pi@raspberrypi5 "cd ~/C-progs/c_trials; exec \$SHELL -l""
zsh: command not found: $SHELL
$ 

Suelo usar funciones de shell cuando necesito alias con necesidades de comillas complejas.

0voto

Joel Puntos 112

He resuelto el problema. La solución era simple, pero desconcertante:

alias sshrp5='ssh -t pi@raspberrypi5 "cd ~/C-progs/c_trials; exec \$SHELL -l"'

En otras palabras, simplemente reemplacé las comillas dobles externas por comillas simples, y funcionó. Pensé que había probado con comillas simples primero, pero tal vez tenía algo más mal??

De todos modos - esta pregunta y respuesta apenas parecen valer la pena dejarlas aquí. Puede ayudar a alguien más, pero buscaré orientación de los moderadores sobre si eliminarlas o no.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X