Go cmd.Run () успешно запускает osascript без ошибок, но приглашение пароля графического интерфейса не отображается и застревает - PullRequest
0 голосов
/ 21 октября 2019

У меня есть что-то вроде этого в моем служебном приложении системного трея, написанном на Go для случаев if os.GOOS == "darwin":

a := "'do shell script \""
b := "\" with administrator privileges'"

// I have also tried:
// 
// a := "'do shell script `" 
//  and 
// b :="` with administrator privileges'"

c := "echo -e something >> someFileThatNeedsSudo.conf && ./launchAdminProgram && ....' with administrator privileges'"
d = a + b + c
// d is then = "'do shell script \"echo -e something >> someFileThatNeedsSudo.conf && ./launchAdminProgram && .... ' with administrator privileges'"

cmd := exec.Command("/usr/bin/osascript", "-e", d)
// Omitting my error handling since there's no output and irrelevant
fmt.Println(cmd)
cmd.Run()

Моя обработка ошибок ловит ошибки, которые показывают выходстатус 1 вместе с ошибкой, и я уже исправил все эти ошибки. Теперь, кажется, он работает без ошибок, а затем (возможно) застревает при запросе пароля пользователя, который не появляется в графическом интерфейсе. Если я посмотрю на вывод fmt.Println (cmd) из вышеприведенного, я получу это:

/usr/bin/osascript -e 'do shell script "echo -e something >> someFileThatNeedsSudo.conf && ./launchAdminProgram && ...." with administrator privileges'

, если я скопирую и вставлю выше в терминале, появится логин GUI, я наберувведите пароль, и все будет работать, как и ожидалось.

Я довольно долго искал и не нашел каких-либо указаний на то, почему это происходит.

Я на Высшей Сьерре, и последняя версия Go from homebrew (go1.13.3 darwin / amd64).

...