设置如下:
- 我正在运行 MX Linux
- 我正在尝试在 Android Studio 中开发 React Native 应用程序
- React Native 依赖 NodeJS(因此
node
可执行文件) - Android Studio 通过 shell 脚本启动(
studio.sh
) - 我使用一个名为 NodeJS 的版本管理工具
asdf
,它设置了垫片以将node
可执行文件重定向到版本控制的版本 - 通常情况下,重定向命令的垫片
node
会在内部加载~/.bashrc
(或者在我的情况下,~/.zshrc
因为我使用 zsh shell) - 当我进入终端并输出时
$PATH
,我的垫片被加载到那里并显示在PATH
- 当我通过我的
.desktop
文件(其执行行如下所示:)Exec=/home/myuser/android-studio/bin/studio.sh
运行Android Studio 时无法找到node
可执行文件 - 似乎我正在使用的 Linux 发行版 (MX Linux) 将
dash
其用作默认 shell - 如果我运行
cat /proc/<PID>/environ
Android Studio PID,我会注意到PATH
缺少垫片 - 我试过了:
- 修改桌面文件中的 Exec 行以运行
bash /home/myuser/android-studio/bin/studio.sh
- 修改 Exec 行以添加其他 PATH 值,例如
env PATH="$HOME/.asdf/shims" /home/myuser/...
- 使用
~/.profile
垫片值设置 PATH
- 修改桌面文件中的 Exec 行以运行
我尝试了所有能想到的方法来将这些 PATH 值传递给 Android Studio shell 脚本,但似乎都不起作用。对我来说,唯一有效的方法是从终端启动 Android Studio,然后 PATH 被继承(我假设)并且它可以找到node
可执行文件。
我在这里遗漏了什么?
答案1
我最终创建了一个包装脚本,并从 .desktop 文件条目执行该脚本。
我的 .desktop 文件仅指向执行我制作的一个名为 的新包装 Bash 脚本studio.bash
,其内容如下:
#!/bin/bash
. $HOME/.asdf/asdf.sh
. $HOME/android-studio/bin/studio.sh
这似乎可以正确运行 asdf shell 脚本来设置垫片,然后调用 shell 脚本来启动 Android Studio。花了我很长时间,但它确实有效。希望有其他(更好的?)建议来解决这个问题,而不需要所有这些繁琐的程序。
我认为问题很大一部分在于 asdf 指定自己为bash
脚本,但在我的系统上将studio.sh
其指定为sh
脚本并sh
映射到,这让人感到困惑dash
。将这三件事结合起来,试图确定.bash_profile
、.bashrc
、.profile
等中的哪些是相关的,对我来说有点费脑筋。