The which command is unlikely to be broken under Solaris 10. It is just a csh script1.
Should this script contents is really corrupted, you can replace it by copy pasting the following lines in it. That will restore its standard behavior.
#! /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}
However, a much more common reason for which to hang is an issue with one of the file systems used by the directories listed in your PATH.
That can be an unresponsive NFS mount or a local file system exhibiting issues.
Here is one way to start investigating. Run this command and see where it hangs:
csh -x /bin/which foo
Another reason why which might hang can be an issue with your .cshrc file as it is sourced at the beginning of the script.
1 It might be argued that for the very reason it is a csh script, whichis broken by design ;-)
typeinstead. – Olaf Dietsche Dec 03 '17 at 09:57whichworks, one of the mounted file systems doesn't. – jlliagre Dec 03 '17 at 10:27