Что такое однострочный bash для того, чтобы travis encrypt
делал то, что должен делать?
Я имею в виду, я хочу вставить имя моей переменной и ее значение иубедитесь, что он будет зашифрован должным образом, не беспокоясь о том, что bash может быть экранирован.
Как правило, это невозможно, потому что, если значение должно быть вставлено в командную строку, необходима какая-то цитата.следовательно, по крайней мере один символ кавычки (если ему разрешено встречаться в значении) должен обрабатываться специально и не может быть просто вставлен в;это причина, по которой включение значения в '
'
не работает, если в значении присутствует '
(и, конечно, '
должно быть разрешено в пароле).Таким образом, требование возможности вставлять значение может быть выполнено только в том случае, если требование однострочный отброшено, и значение предоставляется в качестве ввода.
Затем,поскольку команде travis encrypt
требуется дополнительное цитирование аргумента (возможно, потому что, как считает Чепнер, вызывается eval
), мы можем предоставить это цитирование с помощью printf %q
, например,
<code>read -r
<b>6&a(5!1Ab\</b>
travis encrypt "$(printf %q "FOO=$REPLY")"
(жирная строка должна бытьвставлено).
Как насчет помещения VAR=VALUE
в оператор read
, чтобы собрать все воедино?read -r
, вставьте FOO=6&a(5!1Ab\
и, наконец, travis encrypt "$(printf %q "$REPLY")"
.
Конечно, это также сработает.
Кроме того, действительно нет способа передать результатот read -r
до travis encrypt
?
Если вы имеете в виду буквально для канала , то нет, нет способа передать что-либо команде, которая ожидает только аргументы.Но если вам просто интересно, можем ли мы объединить команды, тогда да, мы также можем написать, например,
<code>read -r; travis encrypt "$(printf %q "$REPLY")"
<b>FOO=6&a(5!1Ab\</b>