Поскольку в вопросе используется слово «подход», это подразумевает, что ответ должен быть «схематичным» или несколько «общим», поэтому я заявляю следующие шаги, которые можно использовать для достижения этого:
/ home / alice / math
]. / home / user / newprogram
), который вызывает ожидаемый-скрипт в цикле с аргументами, переданными вашему BASH-скрипту, и с подстановкой команд , чтобы поймать его вывод. grep
, чтобы извлечь необходимые данные и сохранить их в переменных (для этого вам нужно направить полученный результат в grep
, снова используя подстановку команд для захвата данных, grep
команда доставляет и сохраняет это в переменной). Эти шаги предполагают наличие доступа к файлу (например, бит выполнения и чтения) к / home / alice / math
. Конечно, если это не так, можно, например:
/ home / alice / math
только с помощью chmod
или chown
. alice
и пользователя
в общую группу с достаточными правами, чтобы оба пользователя имели доступ к / home / alice / math
. Мой любимый способ — использовать compgen -c
. Например, чтобы найти все команды, содержащиеmount
:
$ compgen -c | grep mount
gvfs-mount
mmount
ideviceimagemounter
grub-mount
humount
hmount
umount
mountpoint
mount
fusermount
umount
mount.ntfs
mount.lowntfs-3g
mount.cifs
umount.udisks
mount.nfs
umount.nfs
mount
mount.ntfs-3g
mount.fuse
showmount
rpc.mountd
mountesp
umount.udisks2
mountstats
automount
Что хорошо в compgen -c
, так это то, что он также находит псевдонимы, пользовательские функции и встроенный Bash -в командах, например:
$ alias aoeuidhtn='echo hi'
$ compgen -c | grep aoeuidhtn
aoeuidhtn
$ my-great-function() { printf "Inside great function()\n"; }
$ compgen -c | grep great
my-great-function
$ compgen -c | grep '^cd$'
cd
Кроме того, compgen
является частью Bash, поэтому он всегда доступен. Как описаноhelp compgen
:
Display possible completions depending on the options.
Intended to be used from within a shell function generating possible completions. If the optional WORD argument is supplied, matches against WORD are generated.
Exit Status:
Returns success unless an invalid option is supplied or an error occurs.
#! /bin/bash
s=$1 # e.g. mount
IFS=:
for p in $PATH ; do
ls "$p/"*"$s"* 2>/dev/null
done
Установка $IFS
на :
заставляет for
правильно перебирать элементы $PATH
. Перенаправление stderr на /dev/null скрывает сообщения об ошибках для каталогов, не содержащих совпадений.
Это можно сделать разными способами: искать в путях $PATH, использовать команду locate и т. д.
find $(echo $PATH|tr ':' ' ') -maxdepth 1 -name '*mount*'
Это основано на ответе choroba , но использует только функции Bash (, написанные для GNU Bash 4.3.11 ). Он возвращает успех, если какие-либо совпадения найдены, в противном случае — отказ.
#!/bin/bash
shopt -s nullglob
s="${1:?}" # Error if argument is missing or null.
exit=1 # Return failure unless changed.
IFS=:
for p in $PATH; do
for f in "$p/"*"$s"*; do
if [[ -f $f ]]; then
echo "$f"
exit=0 # Return success since match found.
fi
done
done
exit $exit
Для протокола, вzsh
:
type -m '*mount*'
Найдет все совпадения и для каждого сообщит (какой исполняемый файл, функцию, псевдоним... )и где они находятся.
$ type -m 'zc*'
zc is an alias for zcalc
zcalc is an autoload shell function
zcompile is a shell builtin
zcat is /bin/zcat
zcmp is /bin/zcmp