/usr/share/doc/bash/examples/misc/cshtobash is in bash-doc 4.3-14ubuntu1.2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | #! /bin/bash
#
# cshtobash - convert csh aliases, environment variables, and variables to
# bash equivalents
#
# usage: cshtobash [filename]
#
# If filename is given, that file is sourced. Note that csh always
# sources .cshrc. To recreate your csh login environment, run
# `cshtobash ~/.login'.
#
# Inspired by (and some borrowed from) a similar program distributed with
# zsh-3.0.
#
# Chet Ramey
# chet@po.cwru.edu
#
trap 'rm -f $TMPFILE1 $TMPFILEa $TMPFILEe $TMPFILEv $TMPFILEco $TMPFILEci' 0 1 2 3 6 15
{ TMPFILE1=$(mktemp -t cb.1.XXXXXX) &&
TMPFILEa=$(mktemp -t cb.a.XXXXXX) &&
TMPFILEe=$(mktemp -t cb.e.XXXXXX) &&
TMPFILEv=$(mktemp -t cb.v.XXXXXX) &&
TMPFILEco=$(mktemp -t cshout.XXXXXX) &&
TMPFILEci=$(mktemp -t cshin.XXXXXX)
} || exit 1
T=$'\t'
SOURCE="${1:+source $1}"
cat << EOF >$TMPFILEci
$SOURCE
alias >! $TMPFILEa
setenv >! $TMPFILEe
set >! $TMPFILEv
EOF
# give csh a minimal environment, similar to what login would provide
/usr/bin/env - USER=$USER HOME=$HOME PATH=/usr/bin:/bin:/usr/ucb:. TERM=$TERM SHELL=$SHELL /bin/csh -i < $TMPFILEci > $TMPFILEco 2>&1
# First convert aliases
cat << \EOF >$TMPFILE1
mkalias ()
{
case $2 in
'') echo alias ${1}="''" ;;
*[#\!]*)
comm=$(echo $2 | sed 's/\!\*/"$\@"/g
s/\!:\([1-9]\)/"$\1"/g
s/#/\#/g')
echo $1 \(\) "{" command "$comm" "; }"
;;
*) echo alias ${1}=\'$(echo "${2}" | sed "s:':'\\\\'':")\' ;;
esac
}
EOF
sed "s/^\([a-zA-Z0-9_]*\)$T\(.*\)$/mkalias \1 '\2'/" < $TMPFILEa >>$TMPFILE1
echo '# csh aliases'
echo
$BASH $TMPFILE1 | sed -e 's/\$cwd/\$PWD/g' \
-e 's/\$term/\$TERM/g' \
-e 's/\$home/\$HOME/g' \
-e 's/\$user/\$USER/g' \
-e 's/\$prompt/\$PS1/g'
# Next, convert environment variables
echo
echo '# csh environment variables'
echo
# Would be nice to deal with embedded newlines, e.g. in TERMCAP, but ...
sed -e '/^SHLVL/d' \
-e '/^PWD/d' \
-e "s/'/'"\\\\"''"/g \
-e "s/^\([A-Za-z0-9_]*=\)/export \1'/" \
-e "s/$/'/" < $TMPFILEe
# Finally, convert local variables
echo
echo '# csh variables'
echo
sed -e 's/'"$T"'/=/' \
-e "s/'/'"\\\\"''"/g \
-e '/^[A-Za-z0-9_]*=[^(]/{
s/=/='"'/"'
s/$/'"'/"'
}' < $TMPFILEv |
sed -e '/^argv=/d' -e '/^cwd=/d' -e '/^filec=/d' -e '/^status=/d' \
-e '/^verbose=/d' \
-e '/^term=/d' \
-e '/^home=/d' \
-e '/^path=/d' \
-e '/^user=/d' \
-e '/^shell=/d' \
-e '/^cdpath=/d' \
-e '/^mail=/d' \
-e '/^home=/s//HOME=/' \
-e '/^prompt=/s//PS1=/' \
-e '/^histfile=/s//HISTFILE=/' \
-e '/^history=/s//HISTSIZE=/' \
-e '/^savehist=$/s//HISTFILESIZE=${HISTSIZE-500}/' \
-e '/^savehist=/s//HISTFILESIZE=/' \
-e '/^ignoreeof=$/s/^.*$/set -o ignoreeof # ignoreeof/' \
-e '/^ignoreeof=/s//IGNOREEOF=/' \
-e '/^noclobber=/s/^.*$/set -C # noclobber/' \
-e '/^notify=/s/^.*$/set -b # notify/' \
-e '/^noglob=/s/^.*$/set -f # noglob/' \
# now some special csh variables converted to bash equivalents
echo
echo '# special csh variables converted to bash equivalents'
echo
sed -e 's/'"$T"'/=/' < $TMPFILEv |
grep "^cdpath=" |
sed 's/(//
s/ /:/g
s/)//
s/cdpath=/CDPATH=/'
sed -e 's/'"$T"'/=/' < $TMPFILEv |
grep "^mail=" |
sed 's/(//
s/ /:/g
s/)//
s/mail=/MAILPATH=/' |
sed -e 's/MAILPATH=\([0-9][0-9][^:]*\)$/MAILCHECK=\1/' \
-e 's/MAILPATH=\([0-9][0-9][^:]*\):\(.*\)/MAILCHECK=\1 MAILPATH=\2/'
exit 0
|