J'ai le script bash suivant (il s'agit d'une version simplifiée d'un script plus complexe).Sous-shell dans une fonction ne peut pas trouver les commandes bash de base lorsqu'il est appelé à partir d'une autre fonction
#!/usr/bin/env bash
set -x
function execute() {
`$1` # same as $($1), gives "command not found" as do all the following:
# $1 # or ${1}
# eval "$1"
# eval $1
# This gives "No such file or directory" even though it *is* there...
#"$1"
}
function runCommand() {
PATH="${1}"
execute "chmod 777 ${PATH}"
}
execute "chmod 777 ${1}"
runCommand "$1"
#EOF
Quand je le lance-je obtenir la sortie suivante:
+ execute 'chmod 777 build.test-case.sh'
++ chmod 777 build.test-case.sh
+ runCommand build.test-case.sh
+ PATH=build.test-case.sh
+ execute 'chmod 777 build.test-case.sh'
++ chmod 777 build.test-case.sh
./build.test-case.sh: line 5: chmod: command not found
Ainsi chmod
fonctionne lorsque la fonction execute
est appelé directement, mais ne parvient quand il est appelé d'une autre fonction, même si la sortie de débogage semble être exactement les mêmes ...
Quelqu'un peut-il expliquer ce comportement?
Eh bien, ce oeuf sur mon visage, puis. Cela m'apprendra à ne pas adhérer à mes propres normes de ne jamais utiliser toutes les vars caps. :-) – Potherca