Posted February 20, 2010 at 04:02pm in
Linux
I have never looked into using a different shell in Linux, I’m not entirely sure why, maybe I just liked bash enough. This past week I started looking into zsh, and liked what I saw. Last night I migrated my shell files to be 99.9% interchangeable between shells and continue to load what I want without me having to change anything.
This post outlines some changes I made that will allow me to use both bash and zsh with the same startup files, but still have some shell specific settings that will get sourced. I didn’t need to move the files to ~/.shellfiles, but I felt having all of them as symlinks instead of some being symlinks to other dotfiles. Some of the shell specific things are setopt/shopt commands, setting prompts, and history settings.
I am storing the files in ~/.shellfiles, it isn’t my preferred choice, but it is less likely to be used by something else. Since I use version control on my home directory I needed to first ‘hg rename’ each one of my files to the ~/.shellfiles directory. After moving the files symlinks needed to be created to the original files.
Read the rest of this entry »
Posted January 18, 2010 at 02:01am in
Linux
When I wrote the code to automatically generate aliases for hosts in my SSH config I started thinking about how checks are never done to verify we are not overriding an existing alias. This is my solution for it. I almost think that alias should be an alias for register_alias so that all aliases get checked, but I’m sure there could be an instance where it would break something. Let me know what you think about assigning aliases this way.
# .bash_functions
function register_alias() {
local alias=$(echo $* | cut -d'=' -f 1)
local TEMP_CMD=$(which $alias)
local TEMP_ALIAS=$(echo "`alias`" | sed 's/alias\ \(.*\)=.*/\1/' | grep ^$alias$)
if [ ${#TEMP_CMD} -gt 0 ]; then
echo "Alias $alias conflicts with command $TEMP_CMD"
elif [ ${#TEMP_ALIAS} -gt 0 ]; then
echo "Alias $alias conflicts with alias $alias"
else
alias "$*"
fi
}
# .bashrc
if [ -f ~/.bash_functions ]; then
. ~/.bash_functions
fi
# .bash_aliases
register_alias sls='screen -ls'
register_alias sdr='screen -d -r'
Update: I changed the TEMP_ALIAS line to use sed instead of cut/sed
Posted January 18, 2010 at 12:01am in
Linux
There are some aliases and small scripts I use on a normal basis.
I prefer to just type in the machine I want to ssh to instead of typing ssh in front of it. This chunk of code goes in my ~/.bashrc file and creates an alias for each “Host …” entry in ~/.ssh/config. It checks to see if there is an existing command that matches the Host entry, and alerts you if there is a conflict
# Generate SSH aliases
for host in $(grep ^Host .ssh/config | sed s/Host\ //g); do
TEMP_CMD=$(which $host)
TEMP_ALIASES=$(echo "`alias`" | sed 's/alias\ \(.*\)=.*/\1/' | grep ^$host$)
if [ ${#TEMP_CMD} -gt 0 ]; then
echo "Alias $host conflicts with command $TEMP_CMD"
elif [ ${#TEMP_ALIASES} -gt 0 ]; then
echo "Alias $host conflicts with alias $host"
else
alias $host="ssh $host"
fi
done
When you open a terminal you will see something like this if you have conflicts.
Alias www conflicts with alias www
Alias hg conflicts with command /usr/bin/hg
Alias git conflicts with command /usr/bin/git
[20:05:21] manis@baron:~$
Read the rest of this entry »