фон

Я всегда привязываю журналы (как ошибки, так и информацию).. для этого требуются следующие шаги: 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 for 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, но не иначе

1 ответ1

1

Когда ваш псевдоним запускает 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 заключают в кавычки строку разделителя, так что локальная оболочка НЕ заменяет в данных обратные кавычки или некоторые другие вещи.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .