我有一个指向IntelliJ IDEA
IDE 的桌面条目。我想在Desktop Entry 正在执行. ~/.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
使用 Desktop Entry 快捷方式运行:
#!/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
正确。
任何人都知道这里发生了什么或如何调试它?
您的
~/.bashrc
文件可能会检查它所输入的 shell 是否是交互式的,并且在后一种情况下,它会在完成相关说明之前返回。例如,
~/.bashrc
Ubuntu 系统中的默认设置在顶部附近有以下代码:另请注意,在某些系统上,
/bin/sh
可能是一个外壳bash
(例如dash
外壳),它可能不支持~/.bashrc
文件的所有功能。