Tiendo a prefijar los archivos y carpetas que se usan con frecuencia con el carácter "acento grave" (tilde sin mayúsculas, tick de retroceso o acento simple), ya que es fácil de entender, y déjenme ordenar las cosas alfabéticamente, mientras me permite elegir mostrar algunos elementos en la parte superior. Se trabaja muy bien, excepto cuando voy a acceder a estos archivos a través de la CLI o SSH / SCP.
Si intento ejecutar un comando, llamar al archivo sin escape ↝ me inicia en una sesión interactiva ... por ejemplo ↯
# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
↩
>
Sin embargo, si intento la solución lógica ↯
# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
↩
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
Sé que la regla "nueva" es usar una sintaxis como export NOW=$(date)
vs export NOW=
`date` (de hecho, tuve un tiempo incluso escribiendo la última en la sintaxis de SE MD ...) pero esto no está relacionado con el ENV
script ni con ninguno. ..
Nota: Este es un entorno Mac OS X, pero dicho esto, la GUI nunca ha tenido problemas para tratar con este personaje en el día a día y, por lo general, si va a haber un problema de sintaxis en la Terminal, Apple hace un buen trabajo al deshabilitar el comportamiento en la GUI ... No estoy seguro de si esto es un error, o si la técnica para tratar con estos caminos es simplemente oscura ... pero hasta ahora, no he podido encontrar un manera "para escapar de él" ?
Respuestas:
Puede usar 3 barras invertidas como lo menciona Jed Daniels o puede envolverlo entre comillas simples
(')
y usar una barra invertida simple.Ejemplo de ambos están a continuación.
fuente
Tres barras invertidas deberían hacerlo:
La primera barra diagonal inversa escapa de la barra de retroceso para que se envíe al otro lado, pero la otra parte arroja el error porque espera que las barras de retroceso estén en pares. La segunda barra invertida escapa a la primera barra invertida, luego necesita las dos barras invertidas adicionales para poder enviar una barra invertida escapada al otro lado.
EDITAR: como menciona Rik, también puede hacerlo con una sola cita. No había pensado en esto porque no puede usarlo con variables (no se expandirán en el sistema local cuando se encuentran entre comillas simples).
fuente
Normalmente, las líneas de comando son interpretadas por el shell una vez. Sin embargo, por razones históricas, scp también pasa el nombre del archivo al shell remoto, de modo que el shells lo interpreta dos veces . Esto también es lo que hace que cosas como el
scp remote:'/path/prefix*' /path/local/
trabajo, el shell remoto se esté expandiendo/path/prefix*
.La forma más fácil de evitar la segunda expansión es usar sftp, que no usa un shell remoto. Todavía hace la expansión global, pero como puede darle comandos en stdin, puede evitar la expansión de su shell local por completo.
Aparte de eso, puede usar cualquiera de los mecanismos de cotización de shell normales, incluidos los proporcionados por @Jed Daniels y @Rik Schneider, pero quería explicar lo que realmente está sucediendo y mencionar sftp.
(Puede usar todo tipo de funciones de shell en su nombre de archivo scp, por ejemplo
scp server:\$HOME/file dest
, utilizará la idea del shell remoto$HOME
, mientras que si elimina el\
, usaría el shell local ).fuente