On Mon, Jun 27, 2011 at 07:40:53PM +0200, Alexander Hall wrote:
> A post by tedu@ opened my eyes to the function keyword in ksh, which
> allows me to fix an annoyance that has bitten me numerous times.
> 
> after sourcing /etc/ksh.kshrc,
> 
> $ echo $SSH_AUTH_SOCK 
> /tmp/ssh-IS02tLB2UEAT/agent.19126
> $ SSH_AUTH_SOCK= ssh whatever 
> ssh: Could not resolve hostname whatever: no address associated with name
> $ echo $SSH_AUTH_SOCK 
> 
> $ 
> 
> Thus, the magic ssh wrapping is not invisible, but fucks up my
> environment. Using "function" for those indeed give me the way more
> expected behaviour:
> 
> /tmp/ssh-IS02tLB2UEAT/agent.19126
> $ SSH_AUTH_SOCK= ssh whatever 
> ssh: Could not resolve hostname whatever: no address associated with name
> $ echo $SSH_AUTH_SOCK 
> /tmp/ssh-IS02tLB2UEAT/agent.19126
> $ 
> 
> 
> OK?
> 
> /Alexander

Makes sense to me. Untested as yet though.

.... Ken

> 
> 
> Index: ksh.kshrc
> ===================================================================
> RCS file: /cvs/src/etc/ksh.kshrc,v
> retrieving revision 1.15
> diff -u -p -r1.15 ksh.kshrc
> --- ksh.kshrc 26 Apr 2010 09:04:15 -0000      1.15
> +++ ksh.kshrc 27 Jun 2011 17:38:11 -0000
> @@ -92,15 +92,15 @@ case "$-" in
>       esac
>       # do we want window decorations?
>       if [ "$ILS" ]; then
> -             ilabel () { print -n "${ILS}$*${ILE}">/dev/tty; }
> -             label () { print -n "${WLS}$*${WLE}">/dev/tty; }
> +             function ilabel { print -n "${ILS}$*${ILE}">/dev/tty; }
> +             function label { print -n "${WLS}$*${WLE}">/dev/tty; }
>  
>               alias stripe='label "$USER@$HOST ($tty) - $PWD"'
>               alias istripe='ilabel "$USER@$HOST ($tty)"'
>  
> -             wftp () { ilabel "ftp $*"; "ftp" "$@"; eval istripe; }
> -             wcd () { \cd "$@" && eval stripe; }
> -             wssh ()
> +             function wftp { ilabel "ftp $*"; "ftp" "$@"; eval istripe; }
> +             function wcd { \cd "$@" && eval stripe; }
> +             function wssh
>               {
>                       local rc
>                       "ssh" "$@"
> @@ -109,7 +109,7 @@ case "$-" in
>                       eval stripe
>                       return $rc
>               }
> -             wtelnet ()
> +             function wtelnet
>               {
>                       local rc
>                       "telnet" "$@"
> @@ -118,7 +118,7 @@ case "$-" in
>                       eval stripe
>                       return $rc
>               }
> -             wrlogin ()
> +             function wrlogin
>               {
>                       local rc
>                       "rlogin" "$@"
> @@ -127,7 +127,7 @@ case "$-" in
>                       eval stripe
>                       return $rc
>               }
> -             wsu ()
> +             function wsu
>               {
>                       local rc
>                       "su" "$@"
> @@ -173,7 +173,7 @@ esac
>  # commands for both interactive and non-interactive shells
>  
>  # is $1 missing from $2 (or PATH) ?
> -no_path () {
> +function no_path {
>    eval _v="\$${2:-PATH}"
>    case :$_v: in
>    *:$1:*) return 1;;         # no we have it
> @@ -181,15 +181,15 @@ no_path () {
>    return 0
>  }
>  # if $1 exists and is not in path, append it
> -add_path () {
> +function add_path {
>    [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="\$${2:-PATH}:$1"
>  }
>  # if $1 exists and is not in path, prepend it
> -pre_path () {
> +function pre_path {
>    [ -d ${1:-.} ] && no_path $* && eval ${2:-PATH}="$1:\$${2:-PATH}"
>  }
>  # if $1 is in path, remove it
> -del_path () {
> +function del_path {
>    no_path $* || eval ${2:-PATH}=`eval echo :'$'${2:-PATH}: |
>      sed -e "s;:$1:;:;g" -e "s;^:;;" -e "s;:\$;;"`
>  }

Reply via email to