как подключиться к последнему файлу на удаленном сервере через ssh

576
abbood

фон

Я всегда привязываю журналы (как ошибки, так и информацию) .. для этого требуются следующие шаги: 1. ssh на сервер 2. перейдите в каталог журналов 3. определите последний файл, который является либо ошибкой, либо информацией 4. подключитесь к нему

Вот как выглядит типичный каталог журналов:

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 

Я хочу создать псевдоним команды, который позволяет мне сделать это с удаленного компьютера мгновенно

вопрос

сделать это одной командой на удаленном сервере легко (grep infoдля информации и errorдля ошибки):

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

но когда я пытаюсь запустить этот псевдоним:

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

Я получаю эту ошибку:

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

идеи?

Обновить

опция функции

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

эта опция просто заставила меня войти в AWS, но не иначе

0

1 ответ на вопрос

1
dave_thompson_085

Когда запускается ваш псевдоним, ssh ... "cd ...; commands using backquote that I can't easily show on Stack"который дает команду вашей оболочке запускать ls ... | ...конвейер с обратными кавычками локально, который находит имя самого нового файла в вашем текущем каталоге в вашей системе и отправляет это имя как часть команды в удаленную систему, где, конечно, пытается Хвост этот файл не работает.

Ваши варианты:

 # 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 

В общем, вы могли бы также предоставить команду в качестве ввода для удаленной оболочки вместо командной строки (аргумент)

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

но это не сочетается с вашим очевидным, хотя и необъяснимым и необъяснимым желанием оставить bash --loginбег после выхода из tail.

Обратите внимание, что два случая heredoc заключают в кавычки строку разделителя, так что локальная оболочка НЕ ​​заменяет в данных обратные кавычки или некоторые другие вещи.

И во всех случаях было бы лучше использовать более новый $( ... )синтаксис для подстановки команд вместо старого синтаксиса обратных кавычек - особенно для вопросов в стеке, где обратные кавычки мешают (намного? Больше?) Форматированию без кодового блока.

опция функции не работает, см. обновление, чтобы ответить abbood 6 лет назад 0
хотя уродливая цитата сработала! abbood 6 лет назад 0

Похожие вопросы