lftp, stdout, stderr и SAP exec_protocol

#bash #abap #lftp

#bash #abap #lftp

Вопрос:

У нас есть скрипты Linux для выполнения SFTP с помощью предварительно разделенных ключей, но недавно поставщик требует ключ и пароль, я думаю, это похоже на двухфакторную аутентификацию. Таким образом, поставщик проверяет подлинность с помощью предварительно разделенного ключа, а затем запрашивает пароль. Пока пароль не введен, аутентификация выполняется только частично. Итак, мои стандартные скрипты не работают. Чтобы обойти это, я обнаружил lftp , что может передавать пароль в скрипте и решает проблему ввода скриптов и получения файла. Вот мой сценарий:

      #!/bin/sh
     # ###########################
     # Parameters
     # $1 Source Directory
     # $2 Source File
     # $3 Target IP
     # $4 Target File
     # $5 Target Directory
     # $6 Mode (binary or ascii)
     # $7 User
     # $8 Pwd
     # ###########################
         lftp sftp://$7:$8@$3 -e "cd $5; put $1$2; bye"
  

Этот скрипт вызывается из программы SAP abap путем вызова функции SXPG_COMMAND_EXECUTE . Возвращаемая информация из сценариев оболочки обычно фиксируется в возвращаемом параметре EXEC_PROTOCOL . Все отлично работает со всеми другими сценариями bash, но с lftp , мы ничего не получаем из стандартного вывода. Мы получаем ошибки, поэтому я предполагаю, что он захватывает stderr. Есть идеи, почему это так?

Комментарии:

1. Большое спасибо за ответ. Да, я посмотрел на это, и вы правы насчет буферизации. Сейчас я записываю выходные данные в файл журнала и загружаю файл в конце скрипта. Теперь вывод фиксируется, потому что я делаю cat файла журнала в конце. Я буду продолжать экспериментировать.

2. Если вы не возражаете, я опубликую свой комментарий в качестве ответа.

Ответ №1:

Это не имеет отношения ни к SAP, ни к ABAP. Посмотрите на сообщение здесь на ServerFault.com .

Возможно, команда буферизует свой вывод, посмотрите принятый ответ там и попытайтесь его отменить.