Чому "джерело" не працює в сценарії, виконаному як запис на робочий стіл Gnome?


2

У мене є запис на робочому столі, який вказує на IntelliJ IDEAIDE. Мені хотілося додати . ~/.bashrcна початку idea.shсценарій, який виконується введенням на робочому столі. Суть у тому, що IDEA не взяла мою змінену SSH_AUTH_SOCKзмінну env, яку там було визначено. Тому я додав дуже простий . ~/.bashrcна початку idea.sh, щоб виявити, що джерело не запускається. Тепер кілька деталей.

У ~/.bashrcмене це:

# Set GPG TTY
export GPG_TTY=$(tty)

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
  export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi

# Refresh gpg-agent tty in case user switches into an X session
gpg-connect-agent updatestartuptty /bye >/dev/null

Я хотів, щоб це було запущено на початку idea.sh, але . ~/.bashrcце не працює, ЯКЩО я поставив цей точний код безпосередньо idea.shв тому самому місці, він буде працювати чудово.

Пошуковий пошук також працює, якщо я запускаю idea.shбезпосередньо в своєму терміналі. Він не працює лише в тому випадку, якщо я запускаю його за допомогою вводу Desktop Entry. Питання на робочому столі /home/luken/.local/share/applications/jetbrains-idea.desktop:

[Desktop Entry]
Version=1.0
Type=Application
Name=IntelliJ IDEA Ultimate Edition
Icon=/home/luken/Programy/idea-IU-182.4505.22/bin/idea.svg
Exec="/home/luken/Programy/idea-IU-182.4505.22/bin/idea.sh" %f
Comment=Capable and Ergonomic IDE for JVM
Categories=Development;IDE;
Terminal=false
StartupWMClass=jetbrains-idea

Отже, підсумовуючи це:

Запуск idea.shу терміналі:

#!/bin/sh
#
# ---------------------------------------------------------------------
# IntelliJ IDEA startup script.
# ---------------------------------------------------------------------
#

. ~/.bashrc
echo "${SSH_AUTH_SOCK}" > ~/auth.txt

# ...

Вміст auth.txt: /run/user/1000/gnupg/S.gpg-agent.ssh ПРАВИЛЬНО .

Запуск idea.shза допомогою ярлика Введення на робочому столі:

#!/bin/sh
#
# ---------------------------------------------------------------------
# IntelliJ IDEA startup script.
# ---------------------------------------------------------------------
#

. ~/.bashrc
echo "${SSH_AUTH_SOCK}" > ~/auth.txt

# ...

Вміст auth.txt: /run/user/1000/keyring/ssh НЕПРАВНИЙ .

#!/bin/sh
#
# ---------------------------------------------------------------------
# IntelliJ IDEA startup script.
# ---------------------------------------------------------------------
#

# Set GPG TTY
export GPG_TTY=$(tty)

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
  export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi

# Refresh gpg-agent tty in case user switches into an X session
gpg-connect-agent updatestartuptty /bye >/dev/null

echo "${SSH_AUTH_SOCK}" > ~/auth.txt

# ...

Вміст auth.txt: /run/user/1000/gnupg/S.gpg-agent.ssh ПРАВИЛЬНО .

Хтось має уявлення про те, що відбувається тут, або як це налагодити?


Exec не виконує більше одного двійкового файлу . Якщо ви хочете завантажити змінні середовища, вам потрібно вказати їх вбудованим способом VAR="variable" executable.
Брайам

Але це виконання одного сценарію. sourceє частиною цього сценарію.
Лукаш Зарода

@steeldriver Бінго! Я не можу повірити, що я пропустив це (раннє повернення). Опублікуйте це як відповідь. :)
Лукаш Зарода

Відповіді:


3

Ваш ~/.bashrcфайл, ймовірно, перевіряє, чи оболонка, в яку він розміщується, є інтерактивною чи ні, і в останньому випадку повертається перед виконанням відповідних інструкцій.

Наприклад, типовий ~/.bashrcкод у системах Ubuntu розташований у верхній частині наступного коду:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Також пам’ятайте, що в деяких системах /bin/shможе бути інша оболонка, ніж bash(наприклад, dashоболонка), яка може не підтримувати всі функції вашого ~/.bashrcфайлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.