Почему некоторые команды возвращают вывод, но не другие для exec.Command () - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь выяснить, почему некоторые команды оболочки работают с goloang exec.Command, а другие нет, когда все они возвращают один и тот же результат при вводе в терминал. Я в основном хотел бы использовать одну и ту же команду для двоичных файлов Windows и Mac (exec.Command ("where", "go"). Output ()).

Это конкретно:

goInstalled, err := exec.Command("where", "go").Output() // does not return output on mac when compiled but does in terminal command. DOES return output on windows compiled.

goInstalled, err := exec.Command("which", "go").Output() // does not return output on mac when compiled but does in terminal command

goInstalled, err := exec.Command("command", "-v", "go").Output() // returns output when compiled and as terminal command (mac only)

Я бы хотел использовать одну и ту же команду для Windows и Mac (darwin), если это возможно, вместо того, чтобы создавать две отдельные функции для проверки, установлены ли вещи на компьютере пользователя.

1 Ответ

0 голосов
/ 10 января 2019

Основная проблема, с которой вы здесь сталкиваетесь, заключается в том, что exec.Command выполняет программы , где команды, которые вы пытаетесь использовать, на самом деле являются встроенными.

Чтобы использовать встроенные модули, необходимо найти их с помощью exec.LookPath, и они обычно недоступны вне оболочки.

Если необходимо, вы также можете выполнить команду из внутри оболочки, указав в качестве аргумента shell первый аргумент:

exec.Command("/bin/bash", "-c", "command -v foo")
...