Прямой stderr в файл по ssh

Я пытаюсь выполнить команду на локальном компьютере и направить stderr на удаленный компьютер поверх ssh. Я не могу

ssh remote machine "command 2>stderr.log" 

потому что удаленный компьютер не имеет правильного построения для выполнения команды, и мне нужно запустить команду на моем локальном компьютере. Я еще не пробовал, но я в основном уверен, что мы не можем сделать 2>ssh local machine /dir/stderr.log ?

  • Труба не поднимает stdout
  • Какова связь между выходом программы, стандартным выходом и файловыми дескрипторами?
  • CSH и весь вывод (с ошибками) в файл
  • Как создать реальную копию дескриптора файла stdout и stderr без использования unbuffer / script / tee только с встроенными встроенными в bash?
  • Как перенаправить одно и то же сообщение на stdoud и stderr (без временного объекта)
  • Перенаправить bash stdout + stderr в один файл и stderr в другой файл
  • stderr над ssh -t
  • подавлять сообщения stderr в сценарии bash
  • 2 Solutions collect form web for “Прямой stderr в файл по ssh”

    Как я понимаю, вы хотите запустить команду локально, но сохраните вывод stderr в файл удаленного журнала.

    Попробуйте заменить процесс :

     local_command 2> >(ssh somemachine 'cat >logfile') 

    Здесь >(...) является заменой процесса . Он создает файл-подобный объект из команды в parens. Итак, 2> перенаправляет stderr на этот файл-подобный объект, в результате чего вывод сохраняется на удаленном компьютере.

    Или просто используйте обычное перенаправление:

     { local_command 2>&1 1>&3 | ssh somemachine 'cat >logfile'; } 3>&1 

    Здесь stderr перенаправляется на stdout, чтобы мы могли передать его в ssh. Так что stdout не переходит в ssh, мы перенаправляем его на дескриптор файла 3. В конце команды дескриптор файла 3 перенаправляется на stdout, чтобы он отображался на терминале.

    Если вам не нужно отслеживать stderr процесса во время его работы, вы можете использовать временный локальный файл, например

     #!/bin/bash tmpfile=`mktemp` trap '/bin/rm -f $tmpfile ; exit' 0 1 2 3 15 run_command 2> $tmpfile if [ -s $tmpfile ] then scp $tmpfile remoteserver:logfile fi exit 0 

    Если вам нужны «живые» данные, тогда у вас проблемы с буферизацией; отправка stderr над ssh не может быть буферизированной, и поэтому вся эта концепция может быть не лучшим способом ее выполнения.

    Linux и Unix - лучшая ОС в мире.