Question Comment appeler un script shell à partir d'un autre script shell?


J'ai deux scripts shell, a.sh et b.sh.

Comment puis-je appeler b.sh à partir du script shell a.sh?


480
2017-12-02 07:05


origine


Réponses:


Il y a plusieurs façons de le faire:

  1. Rendre l'autre script exécutable, ajoutez le #!/bin/bash ligne en haut et le chemin d'accès du fichier à la variable d'environnement $ PATH. Ensuite, vous pouvez l'appeler comme une commande normale.

  2. Appelez le avec le source commande (alias est .) comme ça: source /path/to/script.

  3. Utilisez le bash commande pour l'exécuter: /bin/bash /path/to/script.

Les première et troisième méthodes exécutent le script comme un autre processus, de sorte que les variables et les fonctions de l'autre script ne seront pas accessibles.
La deuxième méthode exécute le script dans le processus du premier script et extrait les variables et les fonctions de l'autre script afin qu'elles soient utilisables à partir du script appelant.

Dans la seconde méthode, si vous utilisez exit dans le second script, il quittera également le premier script. Ce qui n'arrivera pas dans les première et troisième méthodes.


668
2017-09-11 05:40



Regarde ça.

#!/bin/bash
echo "This script is about to run another script."
sh ./script.sh
echo "This script has just run another script."

163
2018-02-06 13:51



Il y a plusieurs façons de le faire. Terminal pour exécuter le script:

#!/bin/bash
SCRIPT_PATH="/path/to/script.sh"

# Here you execute your script
"$SCRIPT_PATH"

# or
. "$SCRIPT_PATH"

# or
source "$SCRIPT_PATH"

# or
bash "$SCRIPT_PATH"

# or
eval '"$SCRIPT_PATH"'

# or
OUTPUT=$("$SCRIPT_PATH")
echo $OUTPUT

# or
OUTPUT=`"$SCRIPT_PATH"`
echo $OUTPUT

# or
("$SCRIPT_PATH")

# or
(exec "$SCRIPT_PATH")

Tout ceci est correct pour le chemin avec des espaces !!!


59
2018-04-05 16:00



La réponse que je cherchais:

( exec "path/to/script" )

Comme mentionné, exec remplace le shell sans créer un nouveau processus. toutefois, nous pouvons le mettre dans un sous-shell, ce qui est fait en utilisant les parenthèses.

MODIFIER: Réellement ( "path/to/script" ) est assez.


48
2017-12-10 19:02



Dépend de. Brièvement... Si vous voulez charger des variables sur la console actuelle et les exécuter, vous pouvez utiliser source myshellfile.sh sur votre code. Exemple:

!#/bin/bash
set -x
echo "This is an example of run another INTO this session."
source my_lib_of_variables_and_functions.sh
echo "The function internal_function() is defined into my lib."
returned_value=internal_function()
echo $this_is_an_internal_variable

set +x

Si vous voulez juste exécuter un fichier et que la seule chose qui vous intéresse est le résultat, vous pouvez faire:

!#/bin/bash
set -x
./executing_only.sh
sh i_can_execute_this_way_too.sh
bash or_this_way.sh
set +x

J'espère que ça vous aide. Merci.


13
2017-10-17 07:00



Vous pouvez utiliser /bin/sh pour appeler ou exécuter un autre script (via votre script actuel):

 # cat showdate.sh
 #!/bin/bash
 echo "Date is: `date`"

 # cat mainscript.sh
 #!/bin/bash
 echo "You are login as: `whoami`"
 echo "`/bin/sh ./showdate.sh`" # exact path for the script file

La sortie serait:

 # ./mainscript.sh
 You are login as: root
 Date is: Thu Oct 17 02:56:36 EDT 2013

13
2017-08-11 16:35



Ajoutez simplement dans une ligne ce que vous auriez tapé dans un terminal pour exécuter le script!
par exemple.:

#!bin/bash
./myscript.sh &

Si le script à exécuter n'est pas dans le même répertoire, utilisez simplement le chemin complet du script.
par exemple: `/home/user/script-directory/./myscript.sh &


8
2018-03-26 13:31



Vous devez d'abord inclure le fichier que vous appelez:

#!/bin/bash
. includes/included_file.sh

alors vous appelez votre fonction comme ceci:

#!/bin/bash
my_called_function

7
2017-08-18 17:41