ich einen Jenkins Job so konfiguriert haben, ein Bash-Skript Quelle, die andere Bash-Skript Quellen, die einen Alias zum .bashrc
seiner Benutzer hinzufügt und Quellen der .bashrc
selbst, und dann Original-Skript versucht, benutze diesen Alias (gesetzt durch den zweiten). Es scheint jedoch nicht den Alias zu finden, den er gerade erstellt hat. Ich verwende keine Skript-Plugins, abgesehen von der Verwendung eines Build-Schritts "Dateien senden oder Befehle über SSH ausführen", um das Skript zu beziehen.Jenkins kann nicht Shell-Alias zugreifen
Der Job tut dies:
source ./test_script.sh
test_script.sh
wie folgt aussieht:
echo "In test_script.sh"
echo $USER
echo $HOME
source ./setup_env.sh
echo "\nBack in test_script.sh"
alias foo
foo
Und schließlich sieht setup_env.sh
wie folgt aus:
echo "\nIn setup_env.sh"
echo "alias foo=\"echo foobar\"" >> $HOME/.bashrc
source $HOME/.bashrc 2>/dev/null
cat $HOME/.bashrc
Der Ausgang I von der Jenkins erhalten Job sieht so aus:
In test_script.sh
my_user
/home/my_user
\nIn setup_env.sh
...all of my bashrc...
alias foo="echo foo"
\nBack in test_script.sh
alias foo='echo foo'
./test_script.sh: line 7: foo: command not found
Ich verstehe nicht, warum das passiert, wenn ich es selbst auf der Kommandozeile laufen lassen und es erfolgreich verfolgen kann. Warum kann Jenkins den neuen Alias nicht verwenden, wenn er ihn offensichtlich finden kann (wie durch die Ausgabe des Befehls alias foo
gezeigt)?
See (http://unix.stackexchange.com/a/1498/43764) – Armali