J'ai un script bash (appelons-le /usr/bin/bosh
) en utilisant la ligne elle-bang suivant:supercherie bash en utilisant --init fichier
#!/bin/bash --init-file
Il définit deux fonctions, et met généralement interactive shell dans un environnement où l'utilisateur peut contrôler un tas de choses que je veux. Cela fonctionne plutôt bien. Maintenant, pour la partie intéressante, j'aimerais pouvoir laisser les utilisateurs utiliser cette couche intermédiaire pour écrire de nouveaux scripts, sans avoir explicitement besoin de la source. Est-ce possible?
J'ai essayé d'écrire un script (appelons-le /usr/bin/foo
) en utilisant la ligne elle-bang
#!/usr/bin/bosh
Ce que je pensais, serait réécrite pour exécuter la commande
/usr/bin/bosh /usr/bin/foo
qui à son tour résultat en
/bin/bash --init-file /usr/bin/bosh /usr/bin/foo
Mais cela ne fonctionne pas, /usr/bin/foo
est exécuté, mais /usr/bin/bosh
n'est pas source avant cela.
Comment puis-je faire en sorte que le fichier init soit source même si le script n'est pas interactif? Ou devrais-je écrire un script d'emballage pour cela? Je pensais avoir un script comme celui-ci
#!/bin/bash
. /usr/bin/bosh
. "$1"
Mais ce ne serait pas se transformer en un shell interactif si je ne spécifie pas un script à exécuter, ce qui serait un peu dommage.
EDIT
Pour plus de précisions, ce que je demande vraiment, comment puis-je faire la source bash un fichier (comme --init-file), peu importe que ce soit interactif (avant de commencer la partie interactive) ou non (avant d'exécuter le script)? S'il n'y a aucun moyen, y a-t-il un autre moyen de résoudre mon problème peut-être?
Ce n'est pas vrai, ça marche bien sur 2.6.16. Le problème se trouve dans le fichier --init, si vous lisez la page de manuel, vous remarquerez qu'il ne sera pas exécuté s'il ne s'agit pas d'un shell interactif. Je ne peux donc tirer parti que de ce fichier interactif. Je n'ai pas downvote cependant. – falstro
Ensuite, vous ne devez pas utiliser un noyau vanilla. Pour quiconque a voté contre moi, ce qui précède est la vérité telle que je la connais, alors ne me votez pas parce que vous vivez dans votre pays spécial Red-Hat ou autre chose. –
Bonne idée avec l'exec! Pourquoi n'ai-je pas pensé à ça ... Merci! (Bien que votre exemple ne fasse pas vraiment ce que je veux, mais je peux quand même vérifier si je n'ai pas d'argument de script, et exécuter le shell interactif dans ce cas) – falstro