Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
man(1)			     switchBashZsh man page			  man(1)

NAME
     switchBashZsh - Portable shell switching between Bash and Zsh

SYNOPSIS
     switchBashZsh  -  setup  a  portable  shell  environment that you can reuse
     across Bash/Zsh and across multiple operating systems:  (FreeBSD/Linux/Cyg-
     win)

DESCRIPTION
     switchBashZsh  is a convenient way of setting up and then reusing your mas-
     ter shell environment when you work with Bash or Zsh. It works  across  all
     major Open Source implementations (FreeBSD / Linux / Cygwin).

     When  you	run  the  setup script, it just creates the filesystem layout it
     needs. If you later switch your shell from Bash to Zsh or vice  versa,  the
     layout ensures that your new shell works just as the prior one.

     When  you use switchBashZsh the first time (to create your master shell en-
     vironment), the major facilities are the aliases A (edit your aliases)  and
     AA (insert your aliases into the shell environment). Aliases are stored un-
     der ~/.shell/aliases.

     Similar hacks exist for exports (E/EE), functions (F/FF), commands to auto-
     execute on login, a.k.a. 'uponlogin' (I/II) and commands to auto-execute on
     logout, a.k.a. 'uponlogout' (O/OO).

     The  first time you use switchBashZsh, you have to do the hard work in set-
     ting up your complete shell environment. But once you have  done  the  hard
     work,  you can get the same environment every time in future with very lit-
     tle effort - just run switchBashZsh setup script, and copy over your master
     ~/.shell directory (or maybe even modify the switchBashZsh script).

     It is nice to know a bit about the layout utilized by switchBashZsh.

     ~/.bashrc is hard-linked as ~/.bash_profile
     ~/.zshrc and ~/.bashrc source a common file ~/.shellrc

     When using switchBashZsh, do not modify .bashrc /	.bash_profile  /  .zshrc
     yourself. Instead, modify the tree under ~/.shell	(see below).

     ~/.shellrc  uses the following tree in which the symbolic links level_2 and
     level_3 get populated dynamically at the time of login.  (Linux systems use
     level_2 & level_3. FreeBSD/Cygwin use level_2 only.)

     ~/.shell
     |-- aliases
     |-- exports
     |-- functions
     |-- uponlogin
     |-- uponlogout
     |-- level_1.all
     |-- level_2	      ->   ?
     |-- level_2.cygwin
     |-- level_2.freebsd
     |-- level_2.linux
     |-- level_3	      ->   ?
     |-- level_3.arch
     |-- level_3.debian
     |-- level_3.redhat

     The following utility aliases are available in  a	switchBashZsh  installa-
     tion:

     alias editor="$EDITOR"
     alias A="editor ~/.shell/aliases"
     alias AA=". ~/.shell/aliases"
     alias E="editor ~/.shell/exports"
     alias EE=". ~/.shell/exports"
     alias F="editor ~/.shell/functions"
     alias FF=". ~/.shell/functions"
     alias I="editor ~/.shell/uponlogin"
     alias II=". ~/.shell/uponlogin"
     alias O="editor ~/.shell/uponlogout"
     alias OO=". ~/.shell/uponlogout"
     alias L1="editor ~/.shell/level_1.all"
     alias L2="editor ~/.shell/level_2"
     alias L3="editor ~/.shell/level_3"     # only for Linux

     While  it	should not be difficult to commit all the above hacks to memory,
     at least remember the three most important ones:

     A		    Edit portable aliases
     AA 	    Insert portable aliases into the shell environment
     L2 	    Edit OS-specific definitions (aliases/exports/functions)

     When using switchBashZsh, remember that something is considered implementa-
     tion-independent (and thus fully portable) if  it	works  the  same  across
     FreeBSD  /  Linux / Cygwin. <alias su="su - toor"> is a FreeBSD implementa-
     tion-dependent alias because it won't work on Cygwin and Linux,  where  the
     toor user does not exist.

     With the above in mind :

     1)   Put  commands to be auto-executed upon login in ~/.shell/uponlogin and
     commands to be auto-executed upon logout in ~/.shell/uponlogout
     2)   Put all OS-independent aliases in ~/.shell/aliases
     3)   Put all OS-independent exports in ~/.shell/exports
     4)   Put all OS-independent functions in ~/.shell/functions
     5)   Place all OS-dependent definitions ~/.shell/level_2

     If you have any definition that depends not just on the OS but  further  on
     its flavours, place it under ~/.shell/level_3. So if you are on a Linux box
     and are working with a definition that is distro-dependent (eg: an alias to
     <list    all    installed	  packages>),	place	the   definition   under
     ~/.shell/level_3, not ~/.shell/level_2.  ~/.shell/level_2 is  reserved  for
     stuff that works on the OS without concern for its flavours.

OPTIONS
     switchBashZsh does not accept any arguments, except '--help' - which brings
     up this man page.

SEE ALSO
     env(1)

     Running the bare command `alias` displays all aliases active.
     `man alias` should work too, but is currently unusable because it redirects
     as a shell built-in.

BUGS/LIMITATIONS
     1) Default (level_3) yum alias definitions are CentOS-based and may not al-
     ways  work out-of-the-box under RedHat distributions. If so, just use L3 to
     edit those aliases.

AUTHOR
     Manish Jain (bourne.identity@hotmail.com)

1.3				 20 April, 2021 			  man(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=switchBashZsh&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help