Вы можете запустить приложение в среде chroot
, т.е. /
, которое видит приложение, не является реальным /
. Вы создаете полную новую иерархию файловой системы и монтируете ( - связываете
) в нее все, что вам нужно. Важный момент: вы можете смонтировать реальный ~ / tmp
в / tmp
в среде chroot
.
Вместо использования chroot
(что требует привилегий суперпользователя) вы можете сделать более или менее то же самое с контейнерами Linux ( lxc
). Я не знаком с lxc
, но поскольку это обычный пользовательский процесс для хост-системы, вам не нужно быть суперпользователем для таких конфигураций в контейнере.
( read p && echo "11$p" ) <<<8
или
{ read p && echo "11$p"; } <<<8
если переменная должна сохранить свое значение после команды.
<<<
— это здесь -перенаправление строки . Он перенаправляет одну строку в команду или утилиту. Здесь мы используем его для отправки цифры в подоболочку или составную команду. Эта составная команда считывает значение, а затем печатает его как часть строки.
Вы не можете использовать <8
, так как это попытается прочитать из файла с именем 8
.
Если ваши значения находятся в массиве, не нужно перебирать их в цикле, просто выполните:
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
Как правило, в сценариях оболочки вы не хотите писать явные циклы. Цикл выполняется теми текстовыми утилитами, которые обрабатывают ввод по одной строке за раз или по одному аргументу за раз.