Hintergrund

Hintergrund

Hintergrund

Ich protokolliere immer Fehler und Informationen. Dazu sind die folgenden manuellen Schritte erforderlich: 1. Melden Sie sich per SSH bei einem Server an. 2. Wechseln Sie per CD in das Protokollverzeichnis. 3. Identifizieren Sie diezuletztDatei, die entweder Fehler oder Informationen enthält 4. tail into it

so sieht ein typisches Protokollverzeichnis aus:

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

Ich möchte einen Befehlsalias erstellen, mit dem ich dies sofort von einem Remotecomputer aus tun kann

Frage

Dies lässt sich ganz einfach mit einem einzigen Befehl auf dem Remote-Server ausführen (grep infofür Informationen und errorFehler):

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

aber wenn ich versuche, diesen Alias ​​auszuführen:

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

Ich erhalte diesen Fehler:

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

Ideen?

aktualisieren

Funktionsoption

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

diese Option hat mich einfach dazu gebracht, mich bei aws anzumelden, aber sonst nichts

Antwort1

Wenn Ihr Alias ​​ausgeführt wird , wird Ihre Shell angewiesen, die Backquoted- Pipeline ssh ... "cd ...; commands using backquote that I can't easily show on Stack"auszuführenls ... | ...örtlich, das den Namen der neuesten Datei in Ihrem aktuellen Verzeichnis auf Ihrem System findet und diesen Dateinamen als Teil des Befehls an das Remote-System sendet, wo der Versuch, diese Datei zu verfolgen, natürlich nicht funktioniert.

Sie haben folgende Möglichkeiten:

 # 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

Im Allgemeinen können Sie den Befehl auch wie folgt angeben:Eingangzur Remote-Shell anstelle einer Befehlszeile (Argument)

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

Dies passt jedoch nicht zu Ihrem offensichtlichen, wenn auch unerwähnten und unerklärten Wunsch, bash --loginnach dem Verlassen von weiterzulaufen tail.

Beachten Sie, dass in den beiden Heredoc-Fällen die Trennzeichenzeichenfolge in Anführungszeichen gesetzt wird, sodass die lokale Shell innerhalb der Daten KEINE Backquotes oder bestimmte andere Dinge ersetzt.

Und in allen Fällen wäre es besser, $( ... )für die Befehlsersetzung die neuere Syntax anstelle der alten Backquote-Syntax zu verwenden – insbesondere bei Fragen zu Stack, bei denen Backquotes (viel? den meisten?) Nicht-Codeblock-Formatierungen beeinträchtigen.

verwandte Informationen