summaryrefslogtreecommitdiffstats
path: root/scratch/bash-3.1.orig/examples/misc/cshtobash
blob: 8e2b05cf99b27bf1a5352e8be905297d71918d9b (plain)
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
#! /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 /tmp/cb$$.? cshout cshin' 0 1 2 3 6 15

T=$'\t'

SOURCE="${1:+source $1}"

cat << EOF >cshin
$SOURCE
alias >! /tmp/cb$$.a
setenv >! /tmp/cb$$.e
set >! /tmp/cb$$.v
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 < ./cshin > cshout 2>&1

# First convert aliases

cat << \EOF >/tmp/cb$$.1
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'/" < /tmp/cb$$.a >>/tmp/cb$$.1

echo '# csh aliases'
echo

$BASH /tmp/cb$$.1 | 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/$/'/" < /tmp/cb$$.e

# Finally, convert local variables
echo
echo '# csh variables'
echo

sed -e 's/'"$T"'/=/' \
    -e "s/'/'"\\\\"''"/g \
    -e '/^[A-Za-z0-9_]*=[^(]/{
	s/=/='"'/"'
	s/$/'"'/"'
	}' < /tmp/cb$$.v |
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"'/=/' < /tmp/cb$$.v |
grep "^cdpath=" |
sed 's/(//
     s/ /:/g
     s/)//
     s/cdpath=/CDPATH=/'


sed -e 's/'"$T"'/=/' < /tmp/cb$$.v |
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