Skip to content

ksh for bash users

What are my options?

You can switch to BASH if you are very familiar with BASH, however it is recommended to stick with KSH as KSH is more POSIX compliant.

That said, you can also make KSH behave more like BASH, which is more preferable than switching over to BASH.

I want to switch to bash

If you prefer bash,

$ chsh -s /usr/local/bin/bash username

Replace username with your real username.

Log out and log back in to make your default shell bash.

How can I make ksh behave like bash?

Edit your ~/.profile to declare the HOSTNAME variable, as the actual hostname is stored within /etc/myname. Then, you want to make sure that your ~/.profile reads its environment from your ~/.kshrc. So your ~/.profile should look something like this,

# $OpenBSD: dot.profile,v 1.5 2018/02/02 02:29:54 yasuoka Exp $
#
# sh/ksh initialization
PATH=$HOME/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/games
export PATH HOME TERM
HOSTNAME="$(cat /etc/myname)"
ENV="$HOME/.kshrc"; export ENV

Once you have that down, it is now time to edit your ~/.kshrc file.

function _cd {
  \cd "$@"
  PS1=$(
    print -n "$LOGNAME@$HOSTNAME:"
    if [[ "${PWD#$HOME}" != "$PWD" ]]; then
      print -n "~${PWD#$HOME}"
    else
      print -n "$PWD"
    fi
    print "$ "
  )
}
alias cd=_cd
cd "$PWD"

Source: Stack Overflow

Implement command history

"For the arrow keys, you can put this into your the .kshrc file [(pdksh and mksh both use .mkshrc, not .kshrc)] in your home directory:

set -o emacs
alias __A=`echo "\020"`     # up arrow = ^p = back a command
alias __B=`echo "\016"`     # down arrow = ^n = down a command
alias __C=`echo "\006"`     # right arrow = ^f = forward a character
alias __D=`echo "\002"`     # left arrow = ^b = back a character
alias __H=`echo "\001"`     # home = ^a = start of line
alias __Y=`echo "\005"`     # end = ^e = end of line

Source: Stack Exchange

How do I change my password?

$ passwd
Changing password for $user
Old password:
New password:
Retype new password:
$