Bash is the GNU Project's shell. Bash is the Bourne Again SHell. Bash is an sh-compatible shell that incorporates useful features from the Korn shell (ksh) and C shell (csh). It is intended to conform to the IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools standard. It offers functional improvements over sh for both programming and interactive use. In addition, most sh scripts can be run by Bash without modification.
I put together this simple wrapper function for simplifying boot2docker
interactions on my Macbook.
Note: I refer to
.bashrc
as the target as it's the more common shell. However, this has been tested and I personally use it within zsh.
$ docker reload # purge current boot2docker environment $ docker up # start boot2docker and export environment $ docker reset|restart|reup # stop and restart boot2docker $ docker clean # remove all orphaned image shards and all containers that aren't running - DANGEROUS $ docker [etc] # all other arguements are passed directly passed through to docker
# file: ~/.bashrc ############################################################# # Function -- Docker/Boot2Docker ############################################################# function docker_shellinit { local _shellinit="$(boot2docker shellinit)" eval "$(echo ${_shellinit})" echo "${_shellinit}" > ~/.boot2dockerrc } function docker_reup { echo "+ running vpn fix" docker_down echo "+ resetting vbox route" local _iface="$(VBoxManage showvminfo boot2docker-vm --machinereadable | grep hostonlyadapter | cut -d '"' -f 2)" echo "++ sudo route -n add -net 192.168.59.0/24 -interface ${_iface}" sudo route -n add -net 192.168.59.0/24 -interface ${_iface} && \ docker_up } function docker_reset { echo "+ clearing docker variables" unset DOCKER_HOST unset DOCKER_CERT_PATH unset DOCKER_TLS_VERIFY docker_shellinit } function docker_up { echo "+ starting boot2docker" boot2docker up b2dSTATUS=$? docker_reset return $b2dSTATUS } function docker_down { echo "+ stopping boot2docker" boot2docker down return 0 } function docker_clean { echo "+ clean containers" docker ps -a | grep 'Exited ' | awk '{ print $NF }' | xargs docker rm docker ps -a | grep -v 'Up ' | awk '{ print $NF }' | xargs docker rm echo "+ clean images" docker images | grep '^<none>' | awk '{ print $3 }' | xargs docker rmi } function b2d { case "$@" in reload) docker_reset return 0;; reset|fix|reup|fuck) docker_reup return $?;; up) docker_up return $?;; down) docker_down return $?;; clean) docker_clean return $?;; esac boot2docker $@ } docker_exec="$(which docker)" function docker { case "$@" in reload) docker_reset return 0;; reset|fix|reup|fuck) docker_reup return $?;; up) docker_up return $?;; down) docker_down return $?;; clean) docker_clean return $?;; esac $docker_exec $@ }
$ curl -s https://gist.githubusercontent.com/jmervine/6713d10ab05fecd6e1aa/raw/5c5f7020696e23dffa6f046816239574f42767ee/boot2dockerrc.sh >> ~/.bashrc
Recently, I've been playing with Python, I thought I would toss up this writeup I found on executing commands via Python I found as a follow up to my Executing BASH Commmands in Ruby post.
$ node -e 'n=0; setInterval(function(){n++;if(n>=20){console.log(".");process.exit(0);}process.stdout.write(".");},1000);'
In this example, I'm finding all files older then 14 days and removing them.
$ find . -type f -mtime +14 | xargs rm
In this example, I'm finding top level directoies in /foo/bar/bah
that are more then 30 days old and removing them.
$ find /foo/bar/bah -type d -mtime +30 -maxdepth 0 | xargs rm -rf
I typically use this for removing, which is why I've used that as an example. This type of thing is great for a cronjob...
# remove old files daily at 1am * 1 * * * find /foo/bar/bah -type d -mtime +30 -maxdepth 0 | xargs rm -rf
Being a Dev Ops guy, I write gems, scripts and hacks that tend to hook in to system binaries. I know, it would probably be better to write C bindings, but heretofore that hasn't been something I really want to tackle. Additionally, I almost always write tests for my stuff. I've come across the problem where my tests pass locally, but not on Travis-CI.
$ curl https://<domain>/path/to.html --insecure
Also see: HTTPS: Creating Slef-signed Certs.
A script to replace script/server
in Rails, which runs Unicorn over Webrick, because it's faster. This script is designed for development only!
[[ $(zsh --version | awk '{print $2}') > 4.3.17 ]] # usage if [[ $(zsh --version | awk '{print $2}') > 4.3.17 ]]; then # do someting that only higher zsh versions support else # do something else for low versions fi
This was my origitional (not so sexy solution).
The following line will print
zsh
version information if the version is greater then or equal to 4.3.17, otherwise it will return blank:zsh --version | awk '{print $2}' | awk -F'.' ' ( $1 > 4 || ( $1 == 4 && $2 > 3 ) || ( $1 == 4 && $2 == 3 && $3 >= 17 ) ) 'An example usage would be something like:
#!/usr/bin/env bash if test "$( zsh --version | awk '{print $2}' | awk -F'.' ' ( $1 > 4 || ( $1 == 4 && $2 > 3 ) || ( $1 == 4 && $2 == 3 && $3 >= 17 ) ) ' )" then # do someting that only higher zsh versions support else # do something else for low versions fi
Basic Array handling in BASH, because I always forget.
# basic itteration items=( a b c d e ) for i in "${items[@]}" do echo -n $i done #=> abcde # update specific array slot items[1]="foo" # access specific array slot echo ${items[1]} #=> foo
I was looking for a simple way to source and set a bash environment variable from a file, in this specific instance, I can't be 100% sure that the any steps I take to ensure that the file itself is sourced on the host before Rails is started, nor can I impact the format of the file itself (e.g. changing it to YAML).