Ожидайте скрипт для установки Vagrant - прекращается без видимой причины - PullRequest
0 голосов
/ 11 апреля 2019

Я запускаю простой сценарий ожидания, который использует curl для извлечения vagrant dmg, присоединяет его, устанавливает его и проверяет пароль, а затем отключает.

По отдельности все команды выполняются в командной строке и установка выполняется. Однако при выполнении внутри скрипта он завершается после завершения curl.

#!/usr/bin/expect -f

set timeout 60

exec curl -O https://releases.hashicorp.com/vagrant/2.2.2/vagrant_2.2.2_x86_64.dmg
exec hdiutil attach vagrant_2.2.2_x86_64.dmg
spawn sudo  installer -package /Volumes/Vagrant/vagrant.pkg -target /
expect "*?assword" { send “password” }

spawn hdiutil unmount /Volumes/Vagrant

Вывод, который я получаю (сцепленный):


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  1 31.2M    1  563k    0     0  2218k      0  0:00:14 --:--:--   0:00:01 8873k
 97 31.2M   97 30.5M    0     0  9628k      0  0:00:03  0:00:03 --:--:-- 9627k
100 31.2M  100 31.2M    0     0  9668k      0  0:00:03  0:00:03 --:--:-- 9667k
    while executing
"exec curl -O https://releases.hashicorp.com/vagrant/2.2.2/vagrant_2.2.2_x86_64.dmg"
    (file "./vag" line 9)

В этот момент сценарий завершается.

1 Ответ

1 голос
/ 12 апреля 2019
  1. Tcl exec потерпит неудачу, если выполненная команда выведет что-либо в stderr.
  2. curl выводит информацию о ходе загрузки в stderr.

Так что вам нужно попросить exec игнорировать вывод в stderr: exec -ignorestderr curl ...

...