Search code examples
bashquotesshmkdir

Bash scripting: mkdir error


I have the following script sample:

#!/bin/bash

# Aborts the script on "simple command failure" (does not cover pipes)
set -e

# Makes sure we do not run the script outside the correct directory (i.e. the backup directory)
projects_directory='~/projects' 
backup_drectory="${projects_directory}/backup/"
echo "Backup directory: ${backup_drectory}"

if [ ! -d "$projects_directory" ]; then 
    mkdir "$projects_directory"
    echo "${projects_directory} created successfully" 
fi

Which fails miserably with the following output:

Backup directory: ~/projects/backup/
mkdir: cannot create directory `~/projects': No such file or directory

I do not understand why. If I enter the mkdir ~/projects command manually in a Terminal, the directory gets created. Any suggestion is most welcome.


Solution

  • Remove the single quotes:

    projects_directory=~/projects
    

    The quoting prevents the shell from expanding the ~ character.