回答:
組み込みのbash(1)を使用できます compgen
compgen -c
実行できるすべてのコマンドが一覧表示されます。compgen -a
実行できるすべてのエイリアスが一覧表示されます。compgen -b
実行できるすべての組み込みをリストします。compgen -k
実行できるすべてのキーワードがリストされます。compgen -A function
実行できるすべての関数がリストされます。compgen -A function -abck
上記のすべてを一度にリストします。生成できる他の補完については、manページを確認してください。
質問に直接回答するには:
compgen -ac | grep searchstr
あなたがしたくないことをする必要があります。
compgen | grep
、文字列を引数としてcompgen
それ自体に渡す方が効率的です(質問で暗黙的に示されているように、プレフィックスであることがわかっている場合)。この場合、それはですcompgen -ac searchstr
。
whatis compgen
なし」と「手動入力なし」を表示しman compgen
ます。
bash
組み込みであり、独自のmanページを持つ個別のコマンドではないためです。bash(1)
マニュアルページを読むかhelp compgen
、bash
コマンドラインで実行する必要があります。
compgen -c | sort | uniq | less
すると、重複する行なしで使用可能なすべてのコマンドが印刷され、アルファベット順にソートされます。
.bashrcに追加
function ListAllCommands
{
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
-executable -type f -printf '%P\n' | sort -u
}
エイリアスも必要な場合は、次のようにします。
function ListAllCommands
{
COMMANDS=`echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 \
-executable -type f -printf '%P\n'`
ALIASES=`alias | cut -d '=' -f 1`
echo "$COMMANDS"$'\n'"$ALIASES" | sort -u
}
-L
onを使用して、シンボリックリンク先に移動します。注:-L
はオプションであり、一致する式の一部ではないため、コマンドラインのパスの前に配置する必要があります。この場合、find -L {}
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 -executable -type f -printf '%P\n' 2> /dev/null | sort -u
(zsh互換性のために+1)
そこには
type -a mycommand
mycommandが使用される$ PATH内のすべてのエイリアスとコマンドをリストするコマンド。コマンドがいくつかのバリアントに存在するかどうかを確認するために使用できます。それ以外は... $ PATHとすべてのエイリアスを解析するスクリプトがおそらくあるでしょうが、そのようなスクリプトについては知りません。
その他のコマンドは、bashまたはより完全なバージョンのxargs(busyboxが制限されていた)を必要とするため、組み込みシステムでは機能しませんでした。
次のコマンドは、Unixライクなシステムで機能します。
フォルダごとにリスト:
ls $(echo $PATH | tr ':' ' ')
すべてのコマンドを名前でリストする
ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort
tr
ます。なぜ単純ではないのですls $(echo ${PATH//:/ })
か?
このスクリプトを試してください:
#!/bin/bash
echo $PATH | tr : '\n' |
while read e; do
for i in $e/*; do
if [[ -x "$i" && -f "$i" ]]; then
echo $i
fi
done
done
Macユーザーの場合(findには-executable がなく、xargsには-dがありません):
echo $PATH | tr ':' '\n' | xargs -I {} find {} -maxdepth 1 -type f -perm '++x'
Altキーを押してみてください。(altと疑問符を同時に)。リストを作成するには、1、2秒かかります。bashで動作するはずです。
これは、すべての実行可能ファイルとエイリアスのリストを提供するソリューションです。またxargs -d
、Mac OS Xなどが搭載されていないシステムにも移植可能で、スペースを含むパスを適切に処理します。
#!/bin/bash
(echo -n $PATH | tr : '\0' | xargs -0 -n 1 ls; alias | sed 's/alias \([^=]*\)=.*/\1/') | sort -u | grep "$@"
使用法:myscript.sh [grep-options] pattern
、たとえばで始まるすべてのコマンドを検索するにはls
、大文字と小文字を区別せず、次のようにします。
myscript -i ^ls
すべてのコマンドを一覧表示するショートカットメソッド。ターミナルを開き、「タブ」ボタンを2回押します。それはターミナルのすべてのコマンドを表示します
grep
正確にどのようにパイプしますか?
または、簡単な説明と組み合わせた便利なコマンドのリストを取得することもできます(コマンドにmanページがあり、ほとんどの場合)。
apropos -s 1 ''
-s 1 returns only "section 1" manpages which are entries for executable programs.
'' is a search for anything. (If you use an asterisk, on my system, bash throws in a search for all the files and folders in your current working directory.)
次に、好きなようにgrepします。
apropos -s 1 '' | grep xdg
収量:
xdg-desktop-icon (1) - command line tool for (un)installing icons to the desktop
xdg-desktop-menu (1) - command line tool for (un)installing desktop menu items
xdg-email (1) - command line tool for sending mail using the user's preferred e-mail composer
xdg-icon-resource (1) - command line tool for (un)installing icon resources
xdg-mime (1) - command line tool for querying information about file type handling and adding descriptions for new file types
xdg-open (1) - opens a file or URL in the user's preferred application
xdg-screensaver (1) - command line tool for controlling the screensaver
xdg-settings (1) - get various settings from the desktop environment
xdg-user-dir (1) - Find an XDG user dir
xdg-user-dirs-update (1) - Update XDG user dir configuration
結果はソートされていないように見えるため、長いリストを探している場合は、|をスローできます。並べ替え| 真ん中に、それをless / more / mostのようなポケットベルにパイプします。ala:
apropos -s 1 '' | sort | grep zip | less
これは、名前またはその短い説明に「zip」が含まれるすべてのコマンドのソートされたリストを返し、その「少ない」ページャーに送ります。(「less」を$ PAGERに置き換えて、デフォルトのページャーを使用することもできます。)
それはつまり、使用しているシェルに依存するということです。ここに私が見る制約があります:
私はZSHを使用しているので、ここにzshの答えがあります。次の3つのことを行います。
ここにあります:
feed_me() {
(alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort
}
zshを使用する場合は、これで十分です。
bashrcファイルに入れることができる関数は次のとおりです。
機能コマンド検索 { oldIFS = $ {IFS} IFS = ":" $ {PATH}のp 行う ls $ p | grep $ 1 終わった エクスポートIFS = $ {oldIFS} }
使用例:
$コマンド検索gnome gnome-audio-profiles-properties * gnome-eject @ gnome-keyring * gnome-keyring-daemon * gnome-mount * gnome-open * gnome-sound-recorder * gnome-text-editor @ gnome-umount @ gnome-volume-control * polkit-gnome-authorization * vim.gnome * $
参考:IFSは、bashが文字列を分割するために使用する変数です。
確かに、これを行うにはいくつかのより良い方法があるかもしれません。
compgen -c > list.txt && wc list.txt
compgen -c > /tmp/list.txt && /tmp/wc list.txt
次のように入力しないでください。
seachstr
ターミナルで。
シェルは次のような何かを言うでしょう
seacrhstr: command not found
編集:
わかりました、私は反対投票をします、答えが愚かであるため、私は知りたいだけです:この答えのどこが悪いのか!!! 質問者は言った:
コマンドが使用可能かどうかを確認します。
コマンドを入力すると、それが利用可能かどうかがわかります!。
おそらく、彼/彼女は意味「コマンドを実行してからで」 または「スクリプトに含める」が、私は彼の心を読み取ることができません(私は定期的にそれは彼が着ているだけのことであることができないということではありません デフレクタを読んで心を)
formathdd
コマンドが存在するかどうか知りたい。待って、私はそれを実行して見るだけです。ねえ。ありがとう:)
debianの場合:ls / bin / | grep "whatImSearchingFor"