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