Как выполнить программу с переменными по умолчанию?

Частично это дубликат того, что означает двойная тире.

Вы задаете интересный вопрос о lxc, поэтому позвольте мне ответить на это. В ваших двух примерах оба экземпляра -- сообщают lxc, чтобы не интерпретировать параметры после этой точки. Различное позиционирование в этом случае не имеет значения. Однако, поскольку вы используете командную строку в контейнере, вы можете использовать -- как часть этой командной строки. Рассмотрим следующее: я создал файл /tmp/bar, содержащий строку --foo. В контейнере были запущены следующие команды:

root@myContainer:~# echo "here is --foo" >/tmp/bar
root@myContainer:~# echo "this line has no double dash" >> /tmp/bar
root@myContainer:~# cat /tmp/bar
here is --foo
this line has no double dash
root@myContainer:~# exit

Теперь я буду искать это, используя grep. Мне нужно grep знать, что -- является частью шаблона поиска, а не опцией grep:

$ lxc exec myContainer -- grep -- --foo /tmp/bar
here is --foo

Если я использую один --, он будет потребляться lxc, и я получаю ошибку:

$ lxc exec myContainer grep -- --foo /tmp/bar
grep: unrecognized option '--foo'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
1
задан 8 February 2014 в 12:08

2 ответа

Имена переменных среды по умолчанию пишутся заглавными буквами. Теперь, предполагая, что вы будете определять новые переменные окружения с крошечными буквами (как в вашем примере test), вместо того, чтобы использовать простой псевдоним _xterm, вы можете использовать функцию _xterm, где вам нужно сбросить новый Переменные среды и сохраняют только переменные среды по умолчанию для нового экземпляра оболочки:

_xterm () {
    for var in $(env | cut -d"=" -f1)
    do
        if [[ ! "$var" =~ [^a-z] ]]; then
            unset $var   #or env -u $var
        fi
    done
    xterm -fn 7x13 -fa "Ubuntu Mono:size=12:antialias=false"
}

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

0
ответ дан 8 February 2014 в 12:08

Вы можете выполнить свою команду в пустой среде. :

env -i _xterm

Быстрая проверка:

$ export TMUX=3
$ bash -c 'echo $TMUX'
3
$ env -i bash -c 'echo $TMUX'
# nothing echos

Сохранение [ 114], $USER и т. Д .:

$ env -i bash -c 'echo $DISPLAY'
# nothing
$ env -i DISPLAY=$DISPLAY bash -c 'echo $DISPLAY'
:0

Или вы можете явно исключить только некоторые переменные с опцией env -u:

$ export TMUX=3
$ env -u TMUX bash -c 'echo $TMUX'
# nothing
0
ответ дан 8 February 2014 в 12:08

Другие вопросы по тегам:

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