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 info
para obtener información y error
error):
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 --login
la 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.