При просмотре вывода set -x
видно, что 3 команды после cut
заключены в одинарные кавычки. Глядя на сценарий, они не должны быть; им должен предшествовать оператор +
.
Конечно, это предполагает несколько вещей:
- Это не из-за Убежища, а из-за странного поведения Bash
kubectl port-forward
успешно выполнено - Хранилище было инициализировано и готово к распечатке
Почему эти команды заключены в один цитаты?
Некоторые факторы:
- Происходит на MacOS Mojave
- Установлен / обновлен GNU Bash через Homebrew
- Использование терминала MacOS
#!/usr/bin/env bash
# https://www.vaultproject.io
export VAULT_ADDR='http://127.0.0.1:8200'
theJelly='/tmp/jelly.out'
podVault='vault-0'
###---
### Unseal
###---
echo "Unsealing the Vault..."
set -x
unsealKey="$(grep Unseal $theJelly | cut -d' ' -f4)"
echo "$unsealKey"
kubectl exec -t "$podVault" -- vault operator unseal "$unsealKey"
vault status
######################################################################################
# OUTPUT
# Why are the commands (after cut) preceded with a single quote?
######################################################################################
$ sudo /var/tmp/vaultest.sh
Unsealing the Vault...
++ grep Unseal /tmp/jelly.out
++ cut '-d ' -f4
' unsealKey='blah= # <-- why ' unsealKey=' ?
' echo 'blah= # <-- why ' echo '
blah=
' kubectl exec -t vault-0 -- vault operator unseal 'blah= # <-- why ' kubectl ... '
The connection to the server localhost:8080 was refused - did you specify the right host or port?
+ vault status # <-- then it's okay again?!
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed true
Total Shares 1
Threshold 1
Unseal Progress 0/1
Unseal Nonce n/a
Version 1.3.2
HA Enabled false
######################################################################################
# JELLY - just an ASCII text file
######################################################################################
HOST:~ tester$ cat -vte /tmp/jelly.out
^[[0mUnseal Key 1: blah=^[[0m^M$
^[[0m^[[0m^M$
^[[0mInitial Root Token: s.FOO^[[0m^M$
^[[0m^[[0m^M$
^[[0mVault initialized with 1 key shares and a key threshold of 1. Please securely^M$
distribute the key shares printed above. When the Vault is re-sealed,^M$
restarted, or stopped, you must supply at least 1 of these keys to unseal it^M$
before it can start servicing requests.^[[0m^M$
^[[0m^[[0m^M$
^[[0mVault does not store the generated master key. Without at least 1 key to^M$
reconstruct the master key, Vault will remain permanently sealed!^[[0m^M$
^[[0m^[[0m^M$
^[[0mIt is possible to generate new unseal keys, provided you have a quorum of^M$
existing unseal keys shares. See "vault operator rekey" for more information.^[[0m^M$
Если эти действия (ниже) выполняются вручную, они полностью работают; Например: (минус одинарные кавычки)
kubectl exec -t vault-0 -- vault operator unseal blah=
Некоторые диагнозы c шагов:
- создан новый пользователь для выполнения сценария ; У пользователя по умолчанию есть env vars.
- установил / обновил iTerm2, чтобы попробовать что-то в дополнение к Терминалу
- все еще получил тот же результат с новым пользователем / терминалом.
- написал другой скрипт с аналогичными действиями (bash расширение присвоено переменной)
# similar script
$ cat /tmp/yo.sh
#!/usr/bin/env bash
set -x
yoOut='/tmp/yo.out'
yeOut="$(grep ye $yoOut | cut -d' ' -f4)"
echo "$yeOut"
# data file
$ cat /tmp/yo.out
ya
ye1 ye2 ye3 ye4
yi
yo
yu
# set -x output looks normal
$ /tmp/yo.sh
+ yoOut=/tmp/yo.out
++ grep ye /tmp/yo.out
++ cut '-d ' -f4
+ yeOut=ye4
+ echo ye4
ye4
Так мы и ожидаем, что результат будет выглядеть.
Пожалуйста, помогите, эта проблема сводит меня с ума.