Вы можете с ip
команда, и, учитывая, что ifconfig
находится в процессе того, чтобы быть удержавшим от использования большинством дистрибутивов, это - теперь предпочтительный инструмент. Пример:
$ ip route show
212.13.197.0/28 dev eth0 proto kernel scope link src 212.13.197.13
default via 212.13.197.1 dev eth0
В некоторых системах, which -a
шоу все соответствия. Если Ваша оболочка является ударом или zsh ¹, можно использовать type
вместо этого: type foo
показывает первое соответствие и type -a foo
шоу все соответствия. Три команды type
, which
и whence
сделайте главным образом то же самое; они отличаются между оболочками и операционными системами в доступности, опциях, и о чем точно они сообщают. type
всегда доступно и показывает все возможные подобные команде имена (псевдонимы, ключевые слова, созданная-ins оболочка, функции и внешние команды).
Единственный полностью портативный способ отобразить все соответствия состоит в том, чтобы проанализировать $PATH
самостоятельно. Вот сценарий оболочки, который делает это. При создании этого функцией оболочки удостоверьтесь, что включили тело функции в круглые скобки (так, чтобы изменение в IFS
и set -f
не выходите из функции), и изменение exit
кому: return
.
#!/bin/sh
set -f # disable globbing
IFS=: # break words at : only
not_found=1
for d in $PATH; do
if [ -f "$d/$x" ] && [ -x "$d/$x" ]; then
printf '%s\n' "$d/$x"
not_found=0
fi
done
exit $not_found
¹ Или ksh 93, согласно документации, хотя ksh 93 + 31.01.2008 только печать первое соответствие, когда я пробую.
- все или флаг-a покажут Вам всем соответствия в Вашем пути и псевдонимы (по крайней мере, на Fedora, Ubuntu и CentOS):
which -a which
На AIX и Солярисе, это получит Вас близко:
echo "$PATH" | sed -e 's/:/ /g' | \
while read -r p; do find "$p" -type f -name "which"; done
$PATH
содержит пробел или оболочку globbing символы. read -r
необходимо для преодоления обратных косых черт. Это не хороший метод потому что find
займет много времени и может возвратить побочные соответствия если каталог в $PATH
содержит подкаталоги. К счастью, find
не полезно здесь; см. мой ответ.
– Gilles 'SO- stop being evil'
20.03.2011, 02:30
Если у Вас нет a which
поддержка -a
, или whence
доступный, самокрутка:
#!/bin/sh -f
IFS=":"
for PART in $PATH
do
if test -x "$PART/$1"
then
echo $PART/$1
fi
done
set -f
выключить globbing на незащищенном $PATH
. test -f
не достаточно с тех пор, только исполняемые файлы требуются здесь; Вам нужно test -x
. Хм, я понимаю, что забыл регулярный тест файла в своем сценарии.
– Gilles 'SO- stop being evil'
21.03.2011, 23:03
whence README.txt
настолько же вряд ли как whence "file* wi?h we!rd name"
. Просто пытаясь показать, как легкий это должно пересечь $PATH
.
– MattBianco
22.03.2011, 10:58
ksh и zsh имеют "откуда" как встроенная оболочка. whence -a
делает то, что Вы хотите под zsh:
7:27AM 7 % whence -a cat
/usr/bin/cat
/bin/cat
/usr/bin/cat
/bin/cat
Я должен очистить ПУТЬ в zsh, у меня есть много дубликатов в нем. whence -a
работы по-другому под ksh:
$ whence -a cat
cat is a tracked alias for /usr/bin/cat
Я должен сказать, который походит на потенциально полезное поведение, также.
sh
код не работает правильно, если существуют пустые компоненты в$PATH
. Также отметьте это$IFS
разделитель полей (в оболочках POSIX, по крайней мере) в то время как в$PATH
, двоеточие используется в качестве разделителя полей. Посмотритеwhich
сценарий найден на Debian для корректной реализации. – Stéphane Chazelas 25.11.2013, 17:28type
встроенный вksh93u+ 2012-08-01
кажется, работает правильно. – Stéphane Chazelas 25.11.2013, 17:29