J'utilise Ubuntu depuis la version 10.04 et l'ai trouvée plus conviviale que Windows. En ce moment, j'utilise 'Precise 12.04`. J'ai créé de nombreux lanceurs personnalisés pour les scripts bash et je n'ai jamais rencontré de problème avant hier.
J'ai installé une suite logicielle comportant plusieurs exécutables. L'exécutable principal abaqus
se trouve dans \opt\softwaresname
et constitue un lien symbolique vers l'exécutable abq610i
dans /opt/softwaresname/executables/
.
L'exe principal abaqus
nécessite des arguments en ligne de commande. J'utilise l'argument cae
, (c'est-à-dire abaqus cae
) mais avec une autre commande pour rendre les graphiques dans un meilleur mode, d'où l'appel final est: XLIB_SKIP_ARGB_VISUALS=1 abaqus cae
J'ai créé un alias pour cette longue commande dans le fichier .bash_rc
en tant que:
alias abaquscae="XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"
Tout fonctionnait parfaitement, car l’alias exécute le logiciel. Étant un champion paresseux, j'ai pensé créer un lanceur Cairo-Dock pour cela. J'ai donc entré abaquscae
dans la case "commande à lancer au clic" et coché "Exécuter dans un terminal". Cependant à ma grande consternation, en cliquant sur le lanceur il a donné une erreur:
There was an error creating the child process for this terminal
Failed to execute child process "abaquscae" (No such file or directory)
En conséquence, j’ai écrit un petit fichier script bash "abaquscae.sh":
#!/bin/sh
"XLIB_SKIP_ARGB_VISUALS=1 abaqus cae"
et enregistré dans, le rend exécutable et lors de l’exécution dans bash Shell, j’ai eu à nouveau l’erreur similaire, c.-à-d.
./abaquscae.sh: 2: ./abaquscae.sh: XLIB_SKIP_ARGB_VISUALS=1 abaqus cae: not found
Maintenant que je suis totalement perdu, j'ai essayé beaucoup de trucs, par exemple.
1- en supprimant les virgules dans le script bash,
2- le rendant dos2unix
,
3- utiliser le chemin complet de l'exécutable
mais ce script ne fonctionne pas avec le terminal bash.
La commande (ainsi que son alias) fonctionnent correctement dans le terminal bash. Toutefois, lorsqu'ils sont exécutés via un autre canal (scripts/lanceurs, par exemple), le terminal échoue lamentablement à les reconnaître :( ..
Si un expert a des conseils/informations sur la façon de résoudre ce problème, merci de le partager. Je serai très reconnaissant.
Je pense que le script devrait être comme ça:
#!/bin/bash
XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae
Vous pouvez également créer le programme de lancement à l'aide de la commande suivante:
bash -c 'XLIB_SKIP_ARGB_VISUALS=1 /opt/softwaresname/abaqus cae'
La définition de variables d’environnement avant le nom du fichier exécutable sur une ligne de commande est une fonction des shells CLI (Command Line Interface). Si vous mettez VARIABLE=value /path/to/executable
dans un programme de lancement, le programme qui lit le programme de lancement (et lance effectivement le fichier exécutable) essaiera de trouver un fichier nommé "VARIABLE = valeur" et, bien sûr, échouera.
Cette commande lance bash
, l'utilisateur par défaut de Shell dans Ubuntu, et lui dit d'exécuter (l'option -c
) la chaîne "XLIB_SKIP_ARGB_VISUALS = 1/opt/nom_fichier/abaqus cae", ainsi elle sera interprétée. comme lorsque vous tapez cela dans la CLI.
Pour moi, j'utilisais #!/bin/bash/
au lieu de #!/bin/bash
(il y avait un /
supplémentaire à la fin). La plainte était très similaire mais disait: "Le processus enfant n'est pas un répertoire". Tellement utile.