сценарий sh плохо себя ведет в bash, а не в gnome-терминале

avatar
user2186425
8 апреля 2018 в 09:15
100
0
0

Я пытаюсь запустить скрипт, который запускает Java-приложение (Android CTS) из Java, но в зависимости от того, как я запускаю скрипт, приложение ведет себя неправильно.

Что я пытаюсь запустить: ./cts-tradefed run cts

Когда скрипт запускается из оболочки, он работает нормально

При запуске скрипта:

ProcessBuilder().command(command.split(" ")).directory(ctsToolsPath).inheritIO().start()

Приложение работает, но с ошибкой (не все устройства протестированы)

При запуске скрипта:

ProcessBuilder().command(*arrayOf("gnome-terminal", "-e").plus(command)).directory(ctsToolsPath).start().waitFor()

Все работает нормально, но я могу записывать выходные данные.

При запуске сценария в оболочке, но с перенаправлением:

 ./cts-tradefed run cts > somefile

Он также работает с ошибкой. Я тестировал примерно миллион раз и не могу найти, в чем разница между подходами к запуску, которая может привести к неправильному поведению приложения.

Решение:

Проблема была с запуском CTS в качестве интерактивной консоли. Мне удалось решить с помощью параметра commandAndExit

cts-tradered run commandAndExit ...
Источник
Nick
8 апреля 2018 в 09:19
0

Можете выложить сам скрипт? Часто эти проблемы вызваны различиями в PATH и других переменных среды между методами вызова.

user2186425
8 апреля 2018 в 09:28
0

Скрипт: pastebin.com/uPnj9Xnf

user2186425
8 апреля 2018 в 09:32
1

Однако даже простое перенаправление> ломает приложение.

Nick
8 апреля 2018 в 09:34
0

Что произойдет, если вы | tee somefile вместо простого перенаправления?

user2186425
8 апреля 2018 в 09:45
0

Приложение работает с ошибкой. Либо | или > что-то ломает. Я думаю, что когда используется I или >, это скрипт запускается по-другому.

Nick
8 апреля 2018 в 09:54
0

Итак, похоже, что-то тестирует, чтобы проверить, не является ли stdout файлом/каналом и ведет себя по-другому. Строка 124, от имени 'compatibilityConsole', может делать это, чтобы увидеть, есть ли у нее настоящий терминал для вывода.

user1934428
9 апреля 2018 в 09:28
0

@ user2186425: Вы убедились, что скрипт работает с одной и той же версией bash в обоих случаях? Я бы также проверил значение PATH в обоих случаях. Если он отличается, может быть выбрана неправильная версия какого-либо инструмента, который вы используете.

user2186425
10 апреля 2018 в 06:10
0

Та же версия bash, тот же ПУТЬ :(

Ted
10 января 2019 в 04:24
0

использование pty лучше, чем «выполнить командуAndExit».

Ответы (0)