SSH y comando de ejecución

0

Estoy tratando de ingresar a un servidor y ejecutar varios comandos en el host.

Logré hacer lo siguiente y funciona perfectamente

ssh -t -X thor 'cd /stmp/username; ls -rtl ; rm ~/tmp.file; tcsh -l'

Actualmente, estoy tratando de expandir el comando para cambiar el directorio a la última carpeta que aparece en / stmp / username /

En primer lugar, probé el comando que quería usar en el terminal y funciona. Irá a la última carpeta en la lista del directorio. El comando es

cd `ls -rtl | cut -d' ' -f9 | tail -1`

Ahora estoy tratando de combinar el comando anterior en el comando ssh. Pero no funciona.

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d' ' -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

¿Hay algo mal con mi comando?

nabilishes
fuente
Tiene 2 conjuntos de comillas simples , ajuste el comando entre comillas dobles, por ejemplo, ssh -t -X thor "cd ... "para preservar las comillas simples incluidas para su espacio o escapar del espacio.
David C. Rankin
@ DavidC.Rankin Esto debería ser una respuesta, creo.
Kamil Maciorowski
Sí, fue algo simple, pero puedo escribir un artículo. Gracias.
David C. Rankin
@ DavidC.Rankin cambiando a comillas dobles da un nuevo error. Ahora la lista de comandos es el directorio actual donde ejecuté el comando en lugar de ls en el directorio / stmp / username del host thor
habilita el

Respuestas:

2

Cuando su comando funciona desde la línea de comandos, p. Ej.

cd `ls -rtl | cut -d' ' -f9 | tail -1`

No hay problemas de citas presentes. Sin embargo, cuando intenta agregar eso a su sshcomando, lo envuelve sshen comillas simples , pero también ha incluido comillas simples dentro de su comando para encerrar el ' '(espacio) con el cutcomando, lo que causa problemas.

La solución más sencilla es dejar la cita alrededor de su sshcomando para comillas simples y cambiar la cita alrededor de la spaceque comillas dobles dentro de ella, por ejemplo,

ssh -t -X thor 'cd /stmp/username; cd `ls -rtl |cut -d" " -f9 | tail -1` ; rm ~/tmp.file; tcsh -l'

(como resultado no hay problemas de expansión de ruta o variables)

Haz el cambio y avísame si tienes más preguntas.

nota: también debe evitar la sustitución de comandos utilizando backticks a favor de $(...)- mucho más legible.

David C. Rankin
fuente
Esta solución funciona Gracias. Usted ha mencionado en el post que debería evitar el uso de acentos abiertos, puede mostrar un ejemplo utilizando $ (..)
nabilishes
Usar en $(ls -rtl |cut -d" " -f9 | tail -1)lugar de`ls -rtl |cut -d" " -f9 | tail -1`
David C. Rankin
Tengo curiosidad por qué ssh -t -X thor "cd ... "no funcionó?
Nabilishes
1
@nabilishes Hace que los backticks actúen localmente.
Kamil Maciorowski
Dado que las comillas dobles externas no impiden la expansión, el comando se expandía localmente: el ajuste entre comillas simples evita toda expansión
David C. Rankin