Я пытаюсь автоматизировать установку 4 проектов, и у меня возникает проблема с bash, которую я не могу понять. При запуске сценария от имени другого пользователя сценарии останавливаются между 2 шагами, и я не могу думать об этом ...
Во-первых, это сценарий, который работает и успешно устанавливает 4 проекта:
install () {
set -e
echo "Install $1"
git clone git@gitlab.com:xxx/$1.git
cd $1
npm i
echo "Install successful"
cd ..
}
install router
install web
install backend
install file-storage
Теперь мне нужно запустить этот скрипт от имени другого пользователя, поэтому я отредактировал скрипт следующим образом:
#!/bin/bash
set -e
sudo su - username <<USER
install () {
set -e
echo "Install \$1"
git clone git@gitlab.com:xxx/\$1.git
cd \$1
npm i || echo "Error during install"
echo "Install successful"
cd ..
}
install router
install web
install backend
install file-storage
USER
Вот журнал, который он мне дает (с установкой -xv). Я подведу итоги ниже.
//...
+ sudo su - username
+ echo 'Install router'
Install router
+ git clone git@gitlab.xxx/router.git
Cloning into 'router'...
remote: Enumerating objects: 60, done.
remote: Counting objects: 100% (60/60), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 60 (delta 35), reused 35 (delta 23), pack-reused 0
Receiving objects: 100% (60/60), 29.12 KiB | 3.23 MiB/s, done.
Resolving deltas: 100% (35/35), done.
+ cd router
+ npm i
> @root/acme@3.0.9 postinstall /home/username/router/node_modules/@root/acme
> node scripts/postinstall
added 218 packages from 136 contributors and audited 438 packages in 5.894s
2 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
+ echo 'Install successful'
Install successful
+ cd ..
install web
+ install web
+ set -exv
+ echo 'Install web'
Install web
+ git clone git@gitlab.com:xxx/web.git
Cloning into 'web'...
remote: Enumerating objects: 371, done.
remote: Counting objects: 100% (371/371), done.
remote: Compressing objects: 100% (238/238), done.
remote: Total 371 (delta 152), reused 339 (delta 122), pack-reused 0
Receiving objects: 100% (371/371), 31.24 MiB | 9.43 MiB/s, done.
Resolving deltas: 100% (152/152), done.
+ cd web
+ npm i
> core-js@2.6.11 postinstall /home/username/web/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!
The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock
Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)
> core-js@3.6.2 postinstall /home/username/web/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
> core-js-pure@3.6.2 postinstall /home/username/web/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"
> ejs@2.7.4 postinstall /home/username/web/node_modules/ejs
> node ./postinstall.js
Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
> parse-domain@2.3.4 postinstall /home/username/web/node_modules/parse-domain
> run-s build:tries
> parse-domain@2.3.4 build:tries /home/username/web/node_modules/parse-domain
> node scripts/build-tries.js
Downloading public suffix list from https://publicsuffix.org/list/public_suffix_list.dat... (node:8368) [DEP0066] DeprecationWarning: OutgoingMessage.prototype._headers is deprecated
ok
Writing /home/username/web/node_modules/parse-domain/build/tries/icann.complete.json... ok
Writing /home/username/web/node_modules/parse-domain/build/tries/icann.light.json... ok
Writing /home/username/web/node_modules/parse-domain/build/tries/private.complete.json... ok
Running sanity check...
Could not update list of known top-level domains for parse-domain because of "Command failed: /usr/bin/node /home/username/web/node_modules/jest/bin/jest.js"
Using possibly outdated prebuilt list from Sat Nov 02 2019
> styled-components@4.4.1 postinstall /home/username/web/node_modules/styled-components
> node ./scripts/postinstall.js || exit 0
Use styled-components at work? Consider supporting our development efforts at https://opencollective.com/styled-components
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.11 (node_modules/jest-haste-map/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.11: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.11 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.11: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
added 1958 packages from 1236 contributors and audited 1816762 packages in 47.021s
52 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
+ echo 'Install successful'
Install successful
+ cd ..
Есть несколько интересных моментов:
- Установка первого проекта выглядит нормально.
- Скрипты достигают конец второй установки, но не начинается следующая. Останавливается без видимой причины.
- Я пытался изменить порядок установки. Все проекты успешно устанавливаются до
install web
, но в конце install web
сценарии останавливаются и не выполняют никаких дальнейших команд до USER
. - Если удалить строку
npm i
, проблема исчезают. - Я изменил строку на
npm i || echo "Error during install"
, чтобы убедиться, что npm i
не вышел из строя, и, как вы можете видеть, это не так.
Я не знаю не знаю, что я могу сделать дальше, чтобы глубже расследовать ...