Создание временной пустой среды в Linux [закрыто]

Используйте массив, а не строковую переменную:

#!/bin/bash

mode="good"
status="okay"
name="bro"
description="very good man dood"
extra=""

# ----

declare -a PARAMS

# $1: key, $2: value
function addParam {
    if [ ! -z "$2" ]; then
        PARAMS+=("--$1" "$2")
    fi
}

addParam "mode" "$mode"
addParam "status" "$status"
addParam "name" "$name"
addParam "description" "$description"
addParam "extra" "$extra"

echo ./test "${PARAMS[@]}"
./test "${PARAMS[@]}"

Testing

$ ./other.sh
./test --mode good --status okay --name bro --description very good man dood
--mode
good
--status
okay
--name
bro
--description
very good man dood
2
03.07.2018, 23:26
4 ответа

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

Некоторое время назад я написал кое-что, что устанавливает временный каталог и запускает оболочку с минимальной средой. Я использую его много раз в день, чтобы проверить свои ответы на вопросы для этого сайта.

https://github.com/kusalananda/shell-toolbox

Пользователи FreeBSD также могут использовать порт devel/shell-toolbox.

Команда называется shellи создает временный одноразовый рабочий каталог, опционально предварительно -заполняемый содержимым другого каталога, и запускает в нем оболочку. Когда сеанс оболочки завершается, временный каталог удаляется (в зависимости от используемых флагов командной строки ).

Это также можно использовать для запуска другой оболочки, отличной от оболочки входа пользователя.

Он не создает временного пользователя (, так как для этого потребуются административные разрешения ), но устанавливает переменную HOMEво временный каталог, что означает, что любые ссылки на $HOMEили ~будет разрешаться во временный каталог, а не в «настоящий дом» пользователя. Это не "безопасная" среда в том смысле, что остальная часть системы защищена, но она предоставляет интерактивную оболочку в удаленном -каталоге, где созданные файлы и каталоги будут очищены, когда завершено с минимальным воздействием на вашу обычную среду оболочки.

Пример:

[box] $ shell -s "$HOME/skel" zsh
shell: info: Copying /home/kk/skel into /tmp_mfs/shell-zsh.5IAh9F2B
shell: info: Starting /usr/local/bin/zsh in /tmp_mfs/shell-zsh.5IAh9F2B
$ ls -a
.         .Xdefaults.cvsrc    .mailrc   .vimrc
..        .cshrc    .login    .profile  .zshrc
$ echo "$HOME"
/tmp_mfs/shell-zsh.zqHtjz49
$ env
HOME=/tmp_mfs/shell-zsh.zqHtjz49
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11R6/bin:/usr/local/bin
PS1=$
SHELL=/usr/local/bin/zsh
TERM=screen
LOGNAME=kk
SHLVL=1
PWD=/tmp_mfs/shell-zsh.zqHtjz49
OLDPWD=/tmp_mfs/shell-zsh.zqHtjz49
_=/usr/bin/env
$ exit
shell: info: Removing /tmp_mfs/shell-zsh.5IAh9F2B

Это не работает chrootили что-то в этом роде. По сути, это прославленная оболочка вокруг env -i.

См. документацию shell.

1
27.01.2020, 22:02

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

$ unalias -a
$ unset `set|grep '^[A-Z_a-z].*=' |sed 's|=.*$||g'`

Это практически удалит все, что можно удалить. Конечно, вы захотите установить PS1 на что-то, иначе вы не сможете сказать, находитесь ли вы в кавычках или в командной строке.

Примечание :Это относится только к bashи zsh.

-1
27.01.2020, 22:02

Чтобы добавить очевидное, (на данный момент это не было упомянуто ), это одно из намерений тюрем/контейнеров/зон, и хотя это может показаться излишним для непосвященных (Я ничего не предполагаю ), это тривиально, если кто-то уже их использует. (И если человек не их использует, попытка заново изобрести это колесо будет ужасно -подвержена ошибкам.)

Короче говоря, создайте экземпляр временной докеры, сделайте все возможное, а затем удалите его.https://docs.docker.com/get-started/

См. также эту справочную информацию:https://blog.jessfraz.com/post/containers-zones-jails-vms/

3
27.01.2020, 22:02

Использовать моментальный снимок в виртуальной машине.

  1. Создайте виртуальную машину с необходимыми предварительными условиями.
  2. Создайте снимок виртуальной машины.
  3. Проведите любой тест на своей виртуальной машине.
  4. Восстановите моментальный снимок, удалив все изменения, внесенные в систему.
  5. Перейдите к 3.
0
27.01.2020, 22:02

Теги

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