Y a-t-il un moyen de marquer un script à exécuter dans la coque actuelle de Whitin?
Je sais que je peux utiliser: mais j'ai besoin d'un moyen d'inclure le type "point" à l'intérieur du script. P> EDIT:
Voici le cas. J'ai un script "myscript.sh" situé dans le répertoire A: p> lorsque le script est exécuté en normalement: P> . ./myscript.sh
5 Réponses :
#! / bin / sh code> comme première ligne du script li>
- Ajouter une autorisation d'exécution I.e.
chmod + x /path/to/script.sh Li>
ol>
alors vous pouvez exécuter le script p>
I.e. /path/to/script.sh code> p>
ou si vous avez / chemin / à à code> dans la variable d'environnement code> de la page code> Vous pouvez simplement exécuter script.sh code> p> p>
Cela fait exactement le contraire: il s'exécute dans un nouveau processus Shell, dans ma compréhension
Vous pouvez le faire si vous créez une fonction shell au lieu d'un script. Les fonctions sont exécutées dans la même coquille, pas un sous-groupe. Si vous définissez des fonctions dans votre .profile, ils seront disponibles pour la coquille de connexion. P>
J'ai trouvé quelques autres détails et explications ici: http://steve-parker.org/sh /fonctions.shtml p>
Essayez ceci: chemin source / à / shell / script.sh p>
Il exécutera le script shell dans la coque actuelle. P>
Il existe deux façons d'exécuter un script dans la coquille. En fonction de vos besoins, vous devrez faire l'une des opérations suivantes (ne faites pas les deux!). P>
Pour lancer le script en tant que programme: p>
#! / bin / bash code> comme première ligne du script li>
ul>
Ceci sera lu par le chargeur, qui dispose d'une logique spéciale qui interprète les deux premiers caractères #! code> comme "lancez le programme à venir et transmettez-le au contenu". Notez que cela ne fonctionne que correctement pour les programmes écrits pour recevoir le contenu p>
Pour sourcler le script dans la coque actuelle: p>
- Tapez la commande
. script.sh code> ou script source.sh code> li>
ul>
Remarque: . code> in Bash est équivalent à source code> dans Bash. p>
Cela agit comme si vous avez saisi le contenu de "script.sh". Par exemple, si vous définissez une variable dans "script.sh", cette variable sera définie dans la coque actuelle. Vous devrez non révéler la variable pour le refuser de la coque actuelle. P>
Ceci diffère fortement de la #! / bin / bash code> exemple, car définition d'une variable dans le nouveau Bash code> Subprocess n'a pas d'impact sur la coquille que vous avez lancé la sous-processus de . p>
Cette réponse fournit une belle explication, une option de contournement consiste à rechercher la définition de la fonction selon ma réponse ci-dessous.
Bonne explication mais ne répond pas à la question. Comment op d'éviter d'avoir à utiliser le "point" lorsque vous appelez le script? La réponse est des fonctions, comme expliqué dans d'autres réponses.
@Bzazz Je ne pense pas que vous lisiez le post attentivement, la réponse est «Source» et elle est là-bas. Vous ne pouvez pas simplement appeler une fonction sans la définir, et votre définition sera dans un fichier et de lire ce fichier dans la coque actuelle, vous devrez le chercher. En le mettant dans une coque différente, bien vous pouvez utiliser le shebang pour le lire dans une coquille de sous-processus, mais pas la coque actuelle.
Op sait déjà sur l'opérateur de points. Qui est la même que la source. Ils demandent comment inclure cela «à l'intérieur du script». Afin qu'il ne soit pas nécessaire d'utiliser le point lorsque vous appelez le script.
@Bzazz Je ne vois aucune indication dans la question initiale qui soutient l'idée que l'OP sait que la source est la même que celle de DOT. Bien sûr, ils savent sur DOT, mais dans leur cas, ils souhaitent importer des fonctions, des variables et du code d'un fichier externe dans leur script de shell / bash actuel. Généralement, y compris d'autres fichiers peuvent être effectués de deux manières, dans un sous-vase et dans le même shell. Subshell peut être traité avec l'EXED / BASH normal / etc. Mais le même shell nécessite soit "". ou «source» et il n'y a pas vraiment d'autre moyen. Donc, j'ai offert une "source" et j'ai expliqué que c'était la même chose et pourquoi.
@Bzazz Je ne sais pas pourquoi vous êtes si concentré sur cet article. Mais si vous voulez plonger dans les détails, veuillez souligner l'endroit où j'ai été mis à pied avec une référence à une sorte de documentation. En outre, n'essayons pas de deviner l'esprit de l'Asker, car aucun de nous n'a l'esprit. Je suis assez heureux que j'avais probablement la réponse qu'ils voulaient, comme ils m'ont suscité. Cela dit, il n'y a que tant de techniques disponibles, en raison des limites de la langue bash
Une chose que vous pouvez faire est d'ajouter la fonction à votre profil .bash. Ensuite, la fonction n'exécutera pas un script.
Je vais essayer maintenant ... p> fonctionne ... P> Donc, une autre option consiste à créer un fichier avec la définition de fonction et source de ce fichier. p> p>
J'avais déjà défini une fonction comme celle-ci mais lisez que .bash_profile ne devrait pas être trop encombré, j'ai donc déplacé ma fonction à un script et a rencontré le même problème que l'OP obtenu. Ma solution actuelle consiste maintenant à utiliser le 'Edwin Buck''s. Script_name code> solution mais définissez ceci comme alias sur le nom de script normal dans mon .bash_profile code>, comme une autre option de solution
Le "point" est sténographique pour la commande "source". Si je vous comprends correctement, cela ne peut pas être fait. Le script lui-même ne peut pas décider s'il doit être appelé ou approché, le shell d'appel doit décider cela.
En savoir plus sur Bash
Fonction CODE> -S, E.G. Lire tldp.org/ldp/abs/html