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文件可能会检查它所进入的 shell 是否是交互式的,并且在后一种情况下会在完成相关指令之前返回。

例如,~/.bashrcUbuntu系统中默认在顶部附近有以下代码:

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

另请注意,在某些系统上,/bin/sh可能有其他 shell bash(例如,dashshell)可能不支持文件的所有功能~/.bashrc

相关内容