Я бы сделал это с расширением параметра :
$ var='test#asdf'
$ for i in {1..10}; do echo "${var/\#/"$i"}"; done
test1asdf
test2asdf
test3asdf
test4asdf
test5asdf
test6asdf
test7asdf
test8asdf
test9asdf
test10asdf
Расширение ${parameter/pattern/string}
$parameter
(в нашем случае,$var
)и pattern
(экранированным #
— /#
имеет особое значение в контексте «заменить в начале строки», чего мы хотим избежать )на string
("$i"
в нашем случае)Кроме того, вы можете заменить #
на %d
и использовать его в качестве строки формата для printf
:
.
printf "${var/\#/%d}\\n" {1..10}
- It would allow you to run programs in a virtual environment.
- It would use the current system configuration, i.e. that running programs in the sandbox would be identical to running outside the sandbox.
- It would show which files were added or changed.
То, что вы описали, будет реализовано с rootfs только для чтения,и оверлеи, которые вы можете проверить позже. Или, что еще проще, положите свои rootfs на btrfs, или ZFS, или на файловую систему на тонком пуле LVM, и сделайте снапшот перед установкой сомнительного софта. Затем вы можете позже смонтировать снимок и сравнить его с состоянием вашего фактического корня.
Однако гораздо более разумным с точки зрения изоляции является запуск вашего программного обеспечения в контейнере. Эти вещи были буквально созданы для поддержки «неизменяемых» базовых образов с изменениями поверх них — и поэтому легко смотреть только на изменения.
- It would allow you to approve or reject changes if necessary. Like a commit in svn.
СВН, олдскул! Ну и можно конечно выборочно скопировать измененные файлы из оверлея в постоянное хранилище постфактум. Если вы работали со снимками файловой системы, rsync --delete
отлично подходит для выборочного восстановления предыдущих состояний.