此命令在终端中有效,但在 shell 脚本中无效

此命令在终端中有效,但在 shell 脚本中无效

我有一个想要从 shell 脚本运行的命令:

LD_PRELOAD='/usr/$LIB/libstdc++.so.6' DISPLAY=:0 steam

此命令对于在我的系统上正确运行 Steam 必不可少。如果我尝试在不使用此命令的情况下运行 Steam,图标会出现在启动器上,然后又消失,只留下一个我必须在系统监视器中结束的进程。

如果我将该命令直接剪切并粘贴到终端中,它就能完美运行。Steam 会打开并正常运行,终端会在后台提供输出,直到 Steam 再次关闭。

如果我尝试从 shell 脚本运行该命令,它就不再起作用了。会出现相同的问题行为。

有趣的是,如果我进入终端并输入./Steam.sh- 这是我的脚本的名称 - Steam 就会正确打开。

Steam.sh 位于我的主文件夹中,我在终端中从我的主文件夹中运行所有命令,并且我已授予 Steam.sh 执行权限。我也尝试&在 shell 脚本中将其添加到命令末尾,但这没有帮助。

知道为什么这个命令的工作方式会根据它是从 shell 脚本启动还是从终端启动而有所不同吗?我以为 shell 脚本应该与从终端运行命令基本相同。

答案1

因为默认的终端解释器是Dash,您在其中运行脚本Bash。具有所没有的Bash功能。Dash

无论如何,你可以像这样修复 Steam:

运行 Steam 之前:

ln -sf /usr/lib/libstdc++.so.6.0.20 ~/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6

运行 Steam 后:

rm $HOME/.steam/steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libstdc++.so.6
rm $HOME/.steam/steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libstdc++.so.6

相关内容