web-dev-qa-db-fra.com

Cette commande fonctionne dans le terminal, mais pas dans un script Shell

J'ai une commande que je voudrais exécuter à partir d'un script Shell:

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

Cette commande est nécessaire pour exécuter correctement Steam sur mon système. Si j'essaie d'exécuter Steam sans cette commande, l'icône apparaît sur le lanceur, puis disparaît à nouveau, laissant juste un processus que je dois terminer dans le moniteur système.

Si je coupe et colle cette commande directement dans un terminal, cela fonctionne parfaitement. Steam s'ouvre et fonctionne très bien, et le terminal se trouve là en arrière-plan, donnant une sortie jusqu'à ce que Steam soit à nouveau fermé.

Si j'essaie d'exécuter cette commande à partir d'un script Shell, cela ne fonctionne plus. Le même comportement problématique apparaît.

Fait intéressant, si je vais dans le terminal et que je tape ./Steam.sh - qui est le nom de mon script - Steam s'ouvre correctement.

Steam.sh se trouve dans mon dossier personnel, et j'exécute toutes les commandes à partir de mon dossier personnel dans le terminal, et j'ai donné l'autorisation d'exécution à Steam.sh. J'ai également essayé d'ajouter & à la fin de la commande dans le script Shell, mais cela n'a pas aidé.

Une idée pourquoi cette commande fonctionne différemment selon qu'elle est lancée à partir d'un script Shell ou à partir d'un terminal? Je pensais que les scripts Shell étaient censés être essentiellement la même chose que l'exécution de commandes à partir d'un terminal.

1
Excrubulent

Parce que l'interpréteur de terminal par défaut est Dash, où vous exécutez le script dans Bash. Bash présente des choses que Dash ne fait pas.

Quoi qu'il en soit, vous pouvez corriger Steam comme ceci:

Avant d'exécuter 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

Après avoir exécuté 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
1