Переменная окружения в файле автозапуска LXSession?

abc = ok присваивает значение переменной abc . declare abc объявляет переменную с именем abc . Их можно объединить, как объявление abc = ok .

В bash, как и в других оболочках, не нужно объявлять строковые и массивные переменные, поэтому объявление не требуется, если вы не хотите передавать параметры, например объявить -A abc , чтобы сделать abc ассоциативным массивом, или объявить -r , чтобы сделать переменную доступной только для чтения. Однако внутри функции declare действительно имеет значение: оно заставляет переменную быть локальной для функции, а это означает, что значение переменной вне функции (если есть) сохраняется. (Если вы не используете declare -g , что делает переменную не локальной; это полезно в сочетании с другими параметрами, например, declare -gA для создания глобального ассоциативного массива в функции. ) Пример:

f () {
  declare a
  a='a in f'
  b='b in f'
  echo "From f: a is $a"
  echo "From f: b is $b"
}
a='Initial a'
b='Initial b'
f
echo "After f: a is $a"
echo "After f: b is $b"

Вывод:

From f: a is a in f
From f: b is b in f
After f: a is Initial a
After f: b is b in f

Еще одна вещь, которую вы можете сделать с помощью встроенной команды declare , - это

Встроенная функция declare уникальна для bash. Он сильно вдохновлен и очень близок к встроенному в ksh typeset , а bash предоставляет typeset как синоним declare для совместимости. (Я не знаю, почему bash не назвал это просто наборным ). Есть третий синоним, местный . Также существует export , который аналогичен declare -x , опять же для совместимости (с каждой оболочкой в ​​стиле Борна).

0
09.10.2018, 11:29
2 ответа

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

# In.../autostart place this
@/bin/bash  /usr/bin/script_with_env_vars.sh
#
# Calling directly will not work
@/usr/bin/script_with_env_vars.sh - fails!!!
0
28.01.2020, 04:12

Это можно сделать с помощью.xinitrc. Обратите внимание, что если.xinitrc существует, он отвечает за запуск среды рабочего стола (startlxde/startkde/... ). Я попытался просто установить TERM и выйти, и мой вход в XDE просто разбился.

#!/bin/bash
export TERM=linux
exec startlxde

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

0
25.11.2020, 18:43

Теги

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