установка переменных в подокружает при использовании <<

Во-первых: Windows не был GUI DOS долгое время; основанный на NT Windows (NT/2000/XP/Vista/7/8) полностью независим от DOS. explorer.exe не является GUI, также: это - просто оболочка (можно найти замены оболочки для Windows, также),

В глубине души все дистрибутивы основаны на ядре Linux; основные отличия (с точки зрения конечного пользователя - существуют различия в, например, init системы, файлы под /etc и другие места) - между дистрибутивами:

  • управление пакетом

Ubuntu, Монетный двор и все другие находящиеся в Debian дистрибутивы используют dpkg/APT в качестве упаковочной системы. Другие дистрибутивы будут использовать другие системы (например, Red Hat, Fedora, SuSE будет использовать об/мин, Arch будет использовать pacman).

  • выбор пакетов

Эффективно, Монетным двором является Ubuntu с некоторыми дополнительными пакетами (например, кодеки, не включенные с Ubuntu по причинам патента/авторского права) и другая тема (чтобы создать пользовательские идентификационные данные и избежать вопросов о товарном знаке/плагиате и пользовательского беспорядка).

Конечно, можно установить любой другой GUI в Монетном дворе: Вы могли использовать настольную среду Монетного двора (Корица) в Ubuntu, и технически (действительность является другой историей: Вы, вероятно, врежетесь в конфликты пакета), необходимо смочь установить Единицу и визуальные идентификационные данные Ubuntu (темы, значки) в Монетном дворе.

Так, в теории Вы могли превратить свою Ubuntu в систему Выхода монетного двора, но на практике это довольно трудно сделать.


Согласно комментарию о различии между 'интерфейсом' и 'оболочкой', которая может повысить некоторый беспорядок:

В мире UNIX 'оболочка' уже имеет определенное, хорошо принятое значение:

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

Сравните с оболочкой Windows, которая является другой вещью полностью:

Оболочка Windows является основным графическим интерфейсом пользователя в Microsoft Windows. Оболочка Windows включает известные компоненты Windows, такие как панель задач и Меню "Пуск". Оболочка Windows не является тем же как "оболочкой командной строки", но эти два понятия связаны.

В нашем случае мы назвали бы Корицу (или KDE, GNOME, Единица, XFCE) настольной средой: ряд приложений (менеджер окон, панели, объекты лотка уведомления и т.д....), которые обеспечивают пользовательский опыт.

3
15.10.2013, 01:27
2 ответа

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

$ set -o nounset
$ echo "$a"
bash: a: unbound variable
$ bash <<EOF
> a=foo
> echo "$a"
> EOF
bash: a: unbound variable

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

$ bash <<'EOF'
> a=foo
> echo "$a"
> EOF
foo

$ bash <<EOF
> a=foo
> echo "\$a"
> EOF
foo

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

p.s. Всегда двойная кавычка Ваши переменные расширения так, чтобы они не инициировали непреднамеренные соответствия имени файла ШАРИКА.

p.p.s. Включите неопределенную переменную, регистрируясь в Вас, окружает, для ловли опечаток. Это имело бы хорошо осведомленным Вы в к Вашей проблеме.

p.p.p.s. Не используйте оболочки C для сценариев. У них есть много ошибок и несоответствий

2
27.01.2020, 21:23

Вы используете здесь-документ, разграниченный EONG строка.

При представлении здесь-документов с <<word, подвергается ли здесь-документ расширению, зависит от того, заключается ли любой символ в слове в кавычки. Когда никакой символ не заключается в кавычки, здесь-документ подвергается расширению параметра, замене команды и arithmethic расширению. Когда по крайней мере один символ заключается в кавычки, здесь-документ не подвергается расширению; Граница и Korn (и POSIX) оболочки используют полностью неупомянутое слово в качестве заключительного разделителя, в то время как оболочки C используют слово как есть.

Вы могли переписать свой пример как:

#!/bin/csh
echo "Before newgrp"
/usr/bin/newgrp users <<"EONG"
echo "hello from within newgrp"
set a=npy
echo $a
id
"EONG"
echo "After newgrp"

Иначе, с неупомянутым словом, необходимо выйти $a как \$a препятствовать тому, чтобы он был заменен оболочкой прежде чем быть переданным как stdin к newgrp:

#!/bin/csh
echo "Before newgrp"
/usr/bin/newgrp users <<EONG
echo "hello from within newgrp"
set a=npy
echo \$a
id
EONG
echo "After newgrp"
1
27.01.2020, 21:23

Теги

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