I have written a bash script which creates a series of directories and clones a project to selected directories.
For that, I need to cd to each directory (project 1 and project 2), but the script doesn't cd to the second directory nor executes the command.
Instead, it stops after cd and cloning in theproject2 directory. Why doesn't it call the cd_project1 function in the following code?
#!/bin/bash
#Get the current user name
function my_user_name() {
current_user=$USER
echo " Current user is $current_user"
}
#Creating useful directories
function create_useful_directories() {
if [[ ! -d "$scratch" ]]; then
echo "creating relevant directory"
mkdir -p /home/"$current_user"/Downloads/scratch/"$current_user"/project1/project2
else
echo "scratch directory already exists"
:
fi
}
#Going to project2 and cloning
function cd_project2() {
cd /home/"$current_user"/Downloads/scratch/"$current_user"/project1/project2 &&
git clone https://username@bitbucket.org/teamsinspace/documentation-tests.git
exec bash
}
#Going to project1 directory and cloning
function cd_project1() {
cd /home/"$current_user"/Downloads/scratch/"$current_user"/project1/ &&
git clone https://username@bitbucket.org/teamsinspace/documentation-tests.git
exec bash
}
#Running the functions
function main() {
my_user_name
create_useful_directories
cd_project2
cd_project1
}
main
Terminal output:
~/Downloads$. ./bash_install_script.sh
Current user is mihi
creating relevant directory
Cloning into 'documentation-tests'...
remote: Counting objects: 125, done.
remote: Compressing objects: 100% (115/115), done.
remote: Total 125 (delta 59), reused 0 (delta 0)
Receiving objects: 100% (125/125), 33.61 KiB | 362.00 KiB/s, done.
Resolving deltas: 100% (59/59), done.
~/Downloads/scratch/mihi/project1/project2$
exec bashto do. – Dennis Williamson Mar 14 '19 at 23:29execbeforebash, but not beforegit cloneor any other command? – Barmar Mar 15 '19 at 00:59If/mkdircode in create_useful_directory should probably use $scratch or an argument instead of having two ways to construct the expected path – eckes Mar 15 '19 at 10:59source scriptnameor. scriptname). As you have found out, this does not apply at all to the circumstances of the question you posted. Specifically, because the functions containing thecdcommands in your script are executed in the current environment of the script rather than as subshells. – Dennis Williamson Mar 15 '19 at 22:10main(), I like your question even more :) – Sergiy Kolodyazhnyy Mar 16 '19 at 02:50