Exactly how is your development environment configured?
Along with Grails we are seeing a resurgence of the shell and the command line. And if there is anything experienced unix users hate, it’s asking a newbie how their environment is configured and getting a blank stare in return. Well I solved this problem years ago with a simple shell script — it’s time to resurrect printconfig
. A call to printconfig
shows the path and a subset of the shell’s environment variables. For example:
yaal.local[525]> printconfig HOME /Users/amiller ANT_HOME /Users/amiller/devtools/ant/current -> ant-1.7.1 CATALINA_HOME /Users/amiller/devtools/tomcat/current -> tomcat-6.0.16 EMACS_HOME /Users/amiller/devtools/emacs/carbon-emacs-22.3.1_2009.07.25.app GRAILS_HOME /Users/amiller/devtools/grails/current -> grails-1.2.0 GROOVY_HOME /Users/amiller/devtools/groovy/current -> groovy-1.6.7 IVY_HOME /Users/amiller/devtools/ivy/current -> ivy-2.1.0 JAVA_HOME /Users/amiller/devtools/jdk/current -> jdk-1.6.0 JBOSS_HOME /Users/amiller/devtools/jboss-4.0.5 MAVEN_HOME /Users/amiller/devtools/maven/current -> maven-2.0.9 TOMCAT_HOME /Users/amiller/devtools/tomcat/current -> tomcat-6.0.16 ANT_OPTS -Xmx128m JAVA_OPTS -Xmx512m MAVEN_OPTS -Xmx2100m -Xms512m PATH=. /Users/amiller/bin /Users/amiller/devtools/ant/current/bin /Users/amiller/devtools/emacs/carbon-emacs-22.3.1_2009.07.25.app/bin /Users/amiller/devtools/grails/current/bin /Users/amiller/devtools/groovy/current/bin /Users/amiller/devtools/jdk/current/bin ...
(See my post on Fast path switching between projects for an explanation of the “current” path elements.)
Call printconfig
from the last line in your .profile
and your new user shells will always show the environment as it is configured. Try it next time you’re debugging a shell’s environment and let me know what you think.
The printconfig script:
#!/bin/sh # # Echo some config info at shell startup time # (useful when debugging the shell environment.) # # Preserve the intentionally HARD_TABS when editing! # echo "HOME $HOME" for home_var in `printenv | grep _HOME | sort`; do home_var_name=`echo $home_var | awk -F= '{ print $1 }'` home_var_value=`echo $home_var | awk -F= '{ print $2 }'` if [ -h $home_var_value ]; then # echo out what symbolic links are pointing to... echo "$home_var_name `ls -l $home_var_value | awk '{ printf "%s -> %sn", $9, $11 }'`" # ^ hard tab else echo "$home_var_name $home_var_value" # ^ hard tab fi done printenv | grep _OPTS | sort | sed 's/=/ /' # ^ hard tab echo "PATH=$PATH" | sed 's/:/ /g'
This is really cool – thanks for posting!
Yes, Grails is great but it’s quite unfortunate that the tool support is still far behind mature languages such as Java and C# and we’re having to revert back to command line..
I think this is the most annoying thing about new languages in general – they may be less verbose and do things smarter, you spend so much more time with basics such as project setup and environment and plugin configuration and test setup / running and wondering what was that command again to do XYZ.. because the IDE doesn’t do it yet…
I’m looking towards the SpringSource Tool Suite to address this soon.
Anyways, this is just my rant – thanks for this post.