ワイルドカード検索コマンドの使用

ワイルドカード検索コマンドの使用

私はいくつかの調査をしましたが、残念ながら私の質問に対する答えはありませんでした。私に最も近い質問は次のとおりです。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

関連情報