IntelliJ IDEA
IDE를 가리키는 데스크톱 항목이 있습니다 . 실행 중인 스크립트 시작 부분에 Desktop Entry를 추가하고 싶습니다 . ~/.bashrc
. idea.sh
요점은 IDEA가 SSH_AUTH_SOCK
거기에 정의된 수정된 환경 변수를 얻지 못했다는 것입니다. 그래서 . ~/.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
옳은.
여기서 무슨 일이 일어나고 있는지 또는 디버깅하는 방법을 아는 사람이 있습니까?
답변1
파일 ~/.bashrc
은 입력하는 셸이 대화형인지 여부를 확인할 수 있으며, 후자의 경우 관련 지침을 완료하기 전에 반환될 수 있습니다.
예를 들어 ~/.bashrc
Ubuntu 시스템에는 기본적으로 상단 근처에 다음 코드가 있습니다.
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
또한 일부 시스템에는 파일의 모든 기능을 지원하지 않는 다른 셸 (예: 셸) /bin/sh
이 있을 수 있습니다 .bash
dash
~/.bashrc