Skip to content

Instantly share code, notes, and snippets.

@AlexVanderbist
Created September 17, 2020 16:21
Show Gist options
  • Star 55 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save AlexVanderbist/29af47f71f8273e4c91507b6c36e1446 to your computer and use it in GitHub Desktop.
Save AlexVanderbist/29af47f71f8273e4c91507b6c36e1446 to your computer and use it in GitHub Desktop.
`opendb` command - opens the database for a Laravel app in your GUI
opendb () {
[ ! -f .env ] && { echo "No .env file found."; exit 1; }
DB_CONNECTION=$(grep DB_CONNECTION .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_HOST=$(grep DB_HOST .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_PORT=$(grep DB_PORT .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_DATABASE=$(grep DB_DATABASE .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_USERNAME=$(grep DB_USERNAME .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_PASSWORD=$(grep DB_PASSWORD .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_URL="${DB_CONNECTION}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}"
echo "Opening ${DB_URL}"
open $DB_URL
}
@browner12
Copy link

one minor suggestion, prepend all the DB_ with a caret, so we ensure it is at the start of the line

DB_CONNECTION=$(grep ^DB_CONNECTION .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)

our .env file sometimes contains more than one database connect, something like LEGACY_DB_CONNECTION, and that fubars this script.

@browner12
Copy link

also for all you Homestead users out there... hardcode a "0" after the port, so it maps correctly.

DB_URL="${DB_CONNECTION}://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}0/${DB_DATABASE}"

@Erth0
Copy link

Erth0 commented Sep 17, 2020

Anyone can do this for sequel ace ?

@kallepyorala
Copy link

If password contains special characters this doesn't work, one workaround is to use PHP's URL encode:

export DB_PASSWORD=$(grep DB_PASSWORD .env | grep -v -e '^\s*#' | cut -d '=' -f 2-)
DB_PASSWORD=$(php -r 'echo urlencode(getenv("DB_PASSWORD"));')
DB_URL="postgresql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_DATABASE}"

And for PostgreSQL the Laravel's pgsql in DB_CONNECTION doesn't seem to work in URL, hard coded postgresql://... works

@deanzod
Copy link

deanzod commented Sep 18, 2020

Anyone can do this for sequel ace ?

change last line to this:

   open -a "sequel ace" $DB_URL

@Erth0
Copy link

Erth0 commented Sep 18, 2020

Anyone can do this for sequel ace ?

change last line to this:

   open -a "sequel ace" $DB_URL

Thanks bro you are a genius <3

@jmcerrejon
Copy link

Double quote "$DB_URL" to prevent globbing and word splitting. 😉

@amestsantim
Copy link

I was trying to come up with a similar function for launching the given (.env) postgres db in pgAdmin4 but couldn't get anywhere with it.
Has anyone tried that?

@miclf
Copy link

miclf commented Sep 22, 2020

The script doesn’t work if the strings in your .env file are wrapped with quotes, but my grep and cut skills aren’t good enough to improve on that.

Nice trick though, didn’t know about mysql://

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment