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