몇 가지 조사를 해봤지만 불행히도 내 질문에 대한 답변은 없었습니다. 나에게 가장 가까운 질문은 다음과 같습니다.bash 명령 검색
필요한 것 : 검색 명령설치됨와일드카드 문자를 사용하는 명령. 무언가를 제거하고 싶지만 명령을 잊어버렸다고 가정해 보겠습니다. "설치"가 포함되어 있다는 것을 알고 있습니다. 그래서 나는 다음과 같이 할 것입니다 :
searchfor *mount*
이것이 unmount
나에게 필요한 명령이라는 것을 알았습니다. 나는 알고 man -k
있다 yum whatprovides
. 그러나 그것은 내가 찾고 있는 것이 아닙니다. 모두 검색하고 싶어요설치됨명령(변수가 제공하는 디렉터리에서 찾을 수 있음 $PATH
).
답변1
내가 가장 좋아하는 방법은 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
:
옵션에 따라 가능한 완료를 표시합니다.
가능한 완성을 생성하는 쉘 함수 내에서 사용하기 위한 것입니다. 선택적 WORD 매개변수가 제공되면 WORD에 대한 일치 항목이 생성됩니다.
종료 상태:
잘못된 옵션이 제공되거나 오류가 발생하지 않는 한 성공을 반환합니다.
답변2
#! /bin/bash
s=$1 # e.g. mount
IFS=:
for p in $PATH ; do
ls "$p/"*"$s"* 2>/dev/null
done
올바르게 반복 할 수 있는 멤버 $IFS
로 설정합니다 . stderr를 /dev/null로 리디렉션하면 일치 항목이 없는 디렉터리에 대한 오류 메시지가 숨겨집니다.:
for
$PATH
답변3
$PATH 검색, 찾기 명령 사용 등 다양한 방법으로 수행할 수 있습니다.
$(echo $PATH|tr ':' ' ') -max 깊이 1 -name '*mount*' 찾기
답변4
이는 다음을 기반으로 합니다.조 로바의 답변, 그러나 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