'which' para SunOS 5.10 [duplicado]

1

Eu tenho acesso (usuário normal) a uma máquina SunOS 5.10.

/usr/bin/which está quebrado (bloqueia).

É evidente que algo está errado no sistema, mas não ter limites de acesso root drasticamente o que posso fazer. Eu tentei copiar meu which do Ubuntu, mas isso depende de recursos não disponíveis no SunOS 5.10.

$ md5sum /usr/bin/which
a39bb82e9e354c5b99e9e235a53c48d9  /usr/bin/which
$ uname -a
SunOS solaris 5.10 Generic_147147-26 sun4u sparc SUNW,Sun-Fire-V210 Solaris
$ bash --version
GNU bash, version 4.3.33(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Onde posso encontrar um comando which que funcionará neste sistema antigo?

    
por Ole Tange 03.12.2017 / 10:21

2 respostas

3

É improvável que o comando which seja quebrado no Solaris 10. É apenas um script csh 1 .

Se o conteúdo desse script estiver realmente corrompido, você poderá substituí-lo copiando as linhas a seguir nele. Isso restaurará seu comportamento padrão.

#! /usr/bin/csh -f
#
# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# Copyright (c) 1980 Regents of the University of California.
# All rights reserved.  The Berkeley Software License Agreement
# specifies the terms and conditions for redistribution.
#
#ident  "%Z%%M% %I% %E% SMI"
#
#       which : tells you which program you get
#
# Set prompt so .cshrc will think we're interactive and set aliases.
# Save and restore path to prevent .cshrc from messing it up.
set _which_saved_path_ = ( $path )
set prompt = ""
if ( -r ~/.cshrc && -f ~/.cshrc ) source ~/.cshrc
set path = ( $_which_saved_path_ )
unset prompt _which_saved_path_
set noglob
set exit_status = 0
foreach arg ( $argv )
    set alius = 'alias $arg'
    switch ( $#alius )
        case 0 :
            breaksw
        case 1 :
            set arg = $alius[1]
            breaksw
        default :
            echo ${arg}: "      " aliased to $alius
            continue
    endsw
    unset found
    if ( "$arg:h" != "$arg:t" ) then        # head != tail, don't search
        if ( -e $arg ) then         # just do simple lookup
            echo $arg
        else
            echo $arg not found
        set exit_status = 1
        endif
        continue
    else
        foreach i ( $path )
            if ( -x $i/$arg && ! -d $i/$arg ) then
                echo $i/$arg
                set found
                break
            endif
        end
    endif
    if ( ! $?found ) then
        echo no $arg in $path
    set exit_status = 1
    endif
end

exit ${exit_status}

No entanto, um motivo muito mais comum para que which seja interrompido é um problema com um dos sistemas de arquivos usados pelos diretórios listados em seu PATH .

Isso pode ser uma montagem NFS sem resposta ou um sistema de arquivos local exibindo problemas.

Aqui está uma maneira de começar a investigar. Execute este comando e veja onde ele trava:

csh -x /bin/which foo

Outra razão pela qual which pode ser interrompido pode ser um problema com o arquivo .cshrc , pois ele é originado no início do script.

1 Pode-se argumentar que, pelo simples motivo de ser um script csh , which está quebrado por design; -)

    
por 03.12.2017 / 15:06
1

Eu fui com:

#!/bin/sh

type "$@" | perl -pe 's/.* is (a tracked alias for )?//'

para que possa funcionar como substituto imediato de which .

Obrigado @OlafDietsche pelo comentário.

    
por 03.12.2017 / 13:10

Tags