fondo

fondo

fondo

Siempre sigo los registros (tanto de error como de información)... lo que requiere los siguientes pasos manuales 1. ssh en un servidor 2. cd en el directorio de registros 3. identificar elúltimoarchivo que es error o información 4. Continúe en él

Así es como se ve un directorio de registro típico:

error-2017-12-11.log  error-2017-12-30.log  error-2018-01-05.log  error-2018-01-11.log  error-2018-01-17.log  error-2018-01-23.log  error-2018-01-29.log  info-2017-12-26.log  info-2018-01-01.log  info-2018-01-07.log  info-2018-01-13.log  info-2018-01-19.log  info-2018-01-25.log  info-2018-01-31.log
error-2017-12-13.log  error-2017-12-31.log  error-2018-01-06.log  error-2018-01-12.log  error-2018-01-18.log  error-2018-01-24.log  error-2018-01-30.log  info-2017-12-27.log  info-2018-01-02.log  info-2018-01-08.log  info-2018-01-14.log  info-2018-01-20.log  info-2018-01-26.log  info-2018-02-01.log
error-2017-12-26.log  error-2018-01-01.log  error-2018-01-07.log  error-2018-01-13.log  error-2018-01-19.log  error-2018-01-25.log  error-2018-01-31.log  info-2017-12-28.log  info-2018-01-03.log  info-2018-01-09.log  info-2018-01-15.log  info-2018-01-21.log  info-2018-01-27.log  info-2018-02-02.log
error-2017-12-27.log  error-2018-01-02.log  error-2018-01-08.log  error-2018-01-14.log  error-2018-01-20.log  error-2018-01-26.log  error-2018-02-01.log  info-2017-12-29.log  info-2018-01-04.log  info-2018-01-10.log  info-2018-01-16.log  info-2018-01-22.log  info-2018-01-28.log  info-2018-02-03.log
error-2017-12-28.log  error-2018-01-03.log  error-2018-01-09.log  error-2018-01-15.log  error-2018-01-21.log  error-2018-01-27.log  error-2018-02-02.log  info-2017-12-30.log  info-2018-01-05.log  info-2018-01-11.log  info-2018-01-17.log  info-2018-01-23.log  info-2018-01-29.log  outfile
error-2017-12-29.log  error-2018-01-04.log  error-2018-01-10.log  error-2018-01-16.log  error-2018-01-22.log  error-2018-01-28.log  error-2018-02-03.log  info-2017-12-31.log  info-2018-01-06.log  info-2018-01-12.log  info-2018-01-18.log  info-2018-01-24.log  info-2018-01-30.log

Quiero crear un alias de comando que me permita hacer esto desde una máquina remota al instante.

pregunta

Hacer esto como un solo comando en el servidor remoto es fácil (grep infopara obtener información y errorerror):

tail -f `ls -Art | grep info | tail -n 1`

pero cuando intento ejecutar este alias:

alias logger='ssh -i /file.pub user@host -t 
"cd /path/to/logs; tail -f `ls -Art | grep info | tail -n 1`; bash --login"'

Recibo este error:

tail: cannot open '.viminfo' for reading: No such file or directory
tail: no files remaining

ideas?

actualizar

opción de función

function totprod1log() {
    ssh -i file.pub user@host;
    cd /path/to/logs;
    tail -f $(ls -Art | grep info | tail -n 1); 
    bash --login;
}

esta opción simplemente me hizo iniciar sesión en AWS, pero nada más

Respuesta1

Cuando se ejecuta su alias ssh ... "cd ...; commands using backquote that I can't easily show on Stack", le ordena a su shell que ejecute la ls ... | ...canalización entre comillas invertidasen la zona, que encuentra el nombre del archivo más nuevo en su directorio actual en su sistema y envía ese nombre de archivo como parte del comando al sistema remoto, donde, por supuesto, intentar seguir ese archivo no funciona.

Tus opciones son:

 # ugly quoting to work with doublequotes
 alias logger='ssh ... "cd ...; tail -f \`ls ... | ...\`; bash --login"'

 # shell function or script, which let you use clearer singlequotes 
 logger(){
   ssh ... 'cd ...; tail -f `ls ... | ...`; bash --login'
 }
 # or 
 cat <<"END" >logger # use some dir (early) in $PATH 
 ssh ... 'cd ...; tail -f `ls ... | ...`; bash --login' 
 END
 chmod +x logger

En general, también puede proporcionar el comando comoaporteal shell remoto en lugar de una línea de comando (argumento)

ssh ... <<"END" # shouldn't need -t in this case 
cd ...; tail -f `ls ... | ...`
END

pero esto no se combina con su deseo aparente, aunque no mencionado e inexplicable, de dejar bash --loginla ejecución después de salir del archivo tail.

Tenga en cuenta que los dos casos de heredoc citan la cadena delimitadora, por lo que el shell local NO sustituye las comillas invertidas ni otras cosas dentro de los datos.

Y en todos los casos, sería mejor usar la $( ... )sintaxis más nueva para la sustitución de comandos en lugar de la antigua sintaxis de comillas invertidas, especialmente para preguntas sobre Stack donde las comillas invertidas interfieren con (¿mucho? ¿la mayoría?) el formato que no es de bloque de código.

información relacionada