![idea.sh在终端中运行:](https://linux22.com/image/145700/idea.sh%E5%9C%A8%E7%BB%88%E7%AB%AF%E4%B8%AD%E8%BF%90%E8%A1%8C%EF%BC%9A.png)
我有一个指向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
文件可能会检查它所进入的 shell 是否是交互式的,并且在后一种情况下会在完成相关指令之前返回。
例如,~/.bashrc
Ubuntu系统中默认在顶部附近有以下代码:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
另请注意,在某些系统上,/bin/sh
可能有其他 shell bash
(例如,dash
shell)可能不支持文件的所有功能~/.bashrc
。