Замените переменную с помощью stdin?

Вы можете запустить приложение в среде chroot , т.е. / , которое видит приложение, не является реальным / . Вы создаете полную новую иерархию файловой системы и монтируете ( - связываете ) в нее все, что вам нужно. Важный момент: вы можете смонтировать реальный ~ / tmp в / tmp в среде chroot .

Вместо использования chroot (что требует привилегий суперпользователя) вы можете сделать более или менее то же самое с контейнерами Linux ( lxc ). Я не знаком с lxc , но поскольку это обычный пользовательский процесс для хост-системы, вам не нужно быть суперпользователем для таких конфигураций в контейнере.

-1
12.12.2018, 10:42
2 ответа
( read p && echo "11$p" ) <<<8

или

{ read p && echo "11$p"; } <<<8

если переменная должна сохранить свое значение после команды.

<<<— это здесь -перенаправление строки . Он перенаправляет одну строку в команду или утилиту. Здесь мы используем его для отправки цифры в подоболочку или составную команду. Эта составная команда считывает значение, а затем печатает его как часть строки.

Вы не можете использовать <8, так как это попытается прочитать из файла с именем 8.

1
28.01.2020, 05:08

Если ваши значения находятся в массиве, не нужно перебирать их в цикле, просто выполните:

values=(8 9 a)
printf '11%s\n' "${values[@]}"

То же самое, если они находятся в разных переменных:

a=8 b=9 c=a
printf '11%s\n' "$a" "$b" "$c"

Если ввод поступает со стандартного ввода, вы можете использоватьxargs:

xargs printf '11%s\n' << EOF
8 "9"
'a'
EOF

(выше показаны различные виды цитирования или разделителя аргументов, поддерживаемыеxargs).

Или используйте что-то вроде:

sed 's/^/11/' << EOF
8
9
a
EOF

или

awk '{print "11" $0}' << EOF
8
9
a
EOF

Как правило, в сценариях оболочки вы не хотите писать явные циклы. Цикл выполняется теми текстовыми утилитами, которые обрабатывают ввод по одной строке за раз или по одному аргументу за раз.

1
28.01.2020, 05:08

Теги

Похожие вопросы