와일드카드 검색 명령 사용

와일드카드 검색 명령 사용

몇 가지 조사를 해봤지만 불행히도 내 질문에 대한 답변은 없었습니다. 나에게 가장 가까운 질문은 다음과 같습니다.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

게다가 compgenBash의 일부이므로 항상 사용할 수 있습니다. 설명한대로 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

관련 정보