idea.sh터미널에서 실행:

idea.sh터미널에서 실행:

IntelliJ IDEAIDE를 가리키는 데스크톱 항목이 있습니다 . 실행 중인 스크립트 시작 부분에 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은 입력하는 셸이 대화형인지 여부를 확인할 수 있으며, 후자의 경우 관련 지침을 완료하기 전에 반환될 수 있습니다.

예를 들어 ~/.bashrcUbuntu 시스템에는 기본적으로 상단 근처에 다음 코드가 있습니다.

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

또한 일부 시스템에는 파일의 모든 기능을 지원하지 않는 다른 셸 (예: 셸) /bin/sh이 있을 수 있습니다 .bashdash~/.bashrc

관련 정보