# -*- mode: shell-script; mode: flyspell-prog; ispell-local-dictionary: "american" -*- # # Example bash aliases to improve your Drush experience with bash. # Use `drush init` to copy this file to your home directory, rename and # customize it to suit, and source it from your ~/.bashrc file. # # Creates aliases to common Drush commands that work in a global context: # # dr - drush # ddd - drush drupal-directory # ev - drush php-eval # sa - drush site-alias # sa - drush site-alias --local-only (show local site aliases) # st - drush core-status # use - drush site-set # # Aliases for Drush commands that work on the current drupal site: # # cr - drush cache-rebuild # en - drush pm-enable # pml - drush pm-list # unin - drush pm-uninstall # updb - drush updatedb # q - drush sql-query # # Provides several common shell commands to work better with Drush: # # ddd @dev - print the path to the root directory of @dev # cdd @dev - change the current working directory to @dev # lsd @dev - ls root folder of @dev # lsd %files - ls "files" directory of current site # lsd @dev:%devel - ls devel module directory in @dev # @dev st - drush @dev core-status # dssh @live - ssh to the remote server @live points at # gitd @live pull - run `git pull` on the drupal root of @live # # Drush site alias expansion is also done for the cpd command: # # cpd -R @site1:%files @site2:%files # # Note that the 'cpd' alias only works for local sites. Use # `drush rsync` or gitd` to move files between remote sites. # # Aliases are also possible for the following standard # commands. Uncomment their definitions below as desired. # # cd - cddl [*] # ls - lsd # cp - cpd # ssh - dssh # git - gitd # # These standard commands behave exactly the same as they always # do, unless a Drush site specification such as @dev or @live:%files # is used in one of the arguments. # Aliases for common Drush commands that work in a global context. alias dr='drush' alias ddd='drush drupal:directory' alias ev='drush php:eval' alias sa='drush site:alias' alias st='drush core:status' alias use='drush site:set' # Aliases for Drush commands that work on the current drupal site alias cr='drush cache:rebuild' alias en='drush pm:enable' alias pml='drush pm:list' alias unin='drush pm:uninstall' alias updb='drush updatedb' alias q='drush sql:query' # Overrides for standard shell commands. Uncomment to enable. Alias # cd='cdd' if you want to be able to use cd @remote to ssh to a # remote site. # alias cd='cddl' # alias ls='lsd' # alias cp='cpd' # alias ssh='dssh' # alias git='gitd' # We extend the cd command to allow convenient # shorthand notations, such as: # cd @site1 # cd %modules # cd %devel # cd @site2:%files # You must use 'cddl' instead of 'cd' if you are not using # the optional 'cd' alias from above. # This is the "local-only" version of the function; # see the cdd function, below, for an expanded implementation # that will ssh to the remote server when a remote site # specification is used. function cddl() { fastcddl "$1" use @self } # Use this function instead of 'cddl' if you have a very large number # of alias files, and the 'cddl' function is getting too slow as a result. # This function does not automatically set your prompt to the site that # you 'cd' to, as 'cddl' does. function fastcddl() { s="$1" if [ -z "$s" ] then builtin cd elif [ "${s:0:1}" == "@" ] || [ "${s:0:1}" == "%" ] then d="$(drush drupal:directory $1 --local-only 2>/dev/null)" if [ $? == 0 ] then echo "cd $d"; builtin cd "$d"; else t="$(drush site-alias $1 >/dev/null 2>/dev/null)" if [ $? == 0 ] then echo "Cannot cd to remote site $s" else echo "Cannot cd to $s" fi fi else builtin cd "$s"; fi } # Works just like the `cddl` shell alias above, with one additional # feature: `cdd @remote-site` works like `ssh @remote-site`, # whereas cd above will fail unless the site alias is local. If # you prefer this behavior, you can add `alias cd='cdd'` to your .bashrc function cdd() { s="$1" if [ -z "$s" ] then builtin cd elif [ "${s:0:1}" == "@" ] || [ "${s:0:1}" == "%" ] then d="$(drush drupal:directory $s 2>/dev/null)" rh="$(drush sa ${s%%:*} --fields=host --format=list)" if [ -z "$rh" ] then echo "cd $d" builtin cd "$d" else if [ -n "$d" ] then c="cd \"$d\" \; bash" drush -s ${s%%:*} ssh --tty drush ${s%%:*} ssh --tty else drush ssh ${s%%:*} fi fi else builtin cd "$s" fi } # Allow `git @site gitcommand` as a shortcut for `cd @site; git gitcommand`. # Also works on remote sites, though. function gitd() { s="$1" if [ -n "$s" ] && [ ${s:0:1} == "@" ] || [ ${s:0:1} == "%" ] then d="$(drush drupal-directory $s 2>/dev/null)" rh="$(drush sa ${s%%:*} --fields=host --format=list)" if [ -n "$rh" ] then drush ${s%%:*} ssh "cd '$d' ; git ${@:2}" else echo cd "$d" \; git "${@:2}" ( cd "$d" "git" "${@:2}" ) fi else "git" "$@" fi } # Get a directory listing on @site or @site:%files, etc, for local or remote sites. function lsd() { p=() r= for a in "$@" ; do if [ ${a:0:1} == "@" ] || [ ${a:0:1} == "%" ] then p[${#p[@]}]="$(drush drupal:directory $a 2>/dev/null)" if [ ${a:0:1} == "@" ] then rh="$(drush sa ${a%:*} --fields=host --format=list)" if [ -n "$rh" ] then r=${a%:*} fi fi elif [ -n "$a" ] then p[${#p[@]}]="$a" fi done if [ -n "$r" ] then drush $r ssh 'ls "${p[@]}"' else "ls" "${p[@]}" fi } # Copy files from or to @site or @site:%files, etc; local sites only. function cpd() { p=() for a in "$@" ; do if [ ${a:0:1} == "@" ] || [ ${a:0:1} == "%" ] then p[${#p[@]}]="$(drush drupal:directory $a --local-only 2>/dev/null)" elif [ -n "$a" ] then p[${#p[@]}]="$a" fi done "cp" "${p[@]}" } # This alias allows `dssh @site` to work like `drush @site ssh`. # Ssh commands, such as `dssh @site ls /tmp`, are also supported. function dssh() { d="$1" if [ ${d:0:1} == "@" ] then drush "$d" ssh "${@:2}" else "ssh" "$@" fi }