このターミナルセッションで使用可能なすべてのコマンドとエイリアスを一覧表示するLinuxコマンドはありますか?
あなたが 'a'をタイプしてタブを押したように、しかしアルファベットのすべての文字に対して。または 'alias'を実行しながらコマンドを返す。
どうして?以下を実行して、コマンドが利用可能かどうか確認したいです。
ListAllCommands | grep searchstr
Bash(1)組み込みのcompgen
を使うことができます。
compgen -c
はあなたが実行できるすべてのコマンドをリストします。compgen -a
はあなたが実行することができるすべてのエイリアスをリストします。compgen -b
はあなたが実行することができるすべてのビルトインをリストします。compgen -k
は実行可能なすべてのキーワードをリストします。compgen -A function
はあなたが実行することができるすべての機能をリストします。compgen -A function -abck
は一度にすべての上記をリストします。あなたが生成できる他の補完についてはmanページをチェックしてください。
あなたの質問に直接答えるには:
compgen -ac | grep searchstr
あなたが欲しいものをするべきです。
.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
}
そこには
type -a mycommand
mycommandが使用される$ PATH内のすべてのエイリアスとコマンドを一覧表示するcommand。コマンドがいくつかの種類で存在するかどうかを確認するために使用できます。それ以外は...おそらく$ PATHとすべてのエイリアスを解析するスクリプトがいくつかありますが、そのようなスクリプトはわかりません。
"which searchstr"を使用してください。バイナリのパス、またはエイリアスの場合はエイリアス設定を返します。
編集:エイリアスのリストを探しているなら、あなたは使うことができます:
alias -p | cut -d= -f1 | cut -d' ' -f2
どちらのPATH検索でも、あなたが好むと答えてください。あなたがbashを使っていると仮定します。
その他のコマンドは組み込みシステムではうまくいきませんでした。bashやもっと完全なバージョンのxargsが必要だからです(busyboxは限られていました)。
以下のコマンドはどんなUnix風システムでも動作するはずです。
フォルダ別に一覧表示:
ls $(echo $PATH | tr ':' ' ')
すべてのコマンドを名前順にリストします
ls $(echo $PATH | tr ':' ' ') | grep -v '/' | grep . | sort
このスクリプトを試してください。
#!/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'
コマンドに関連付けられているキーワードに基づいてコマンドを一覧表示すると便利です。
使用方法:man -k "your keyword"
気軽に組み合わせてください:| grep "another Word"
たとえば、テキストエディタを探すには、次のように入力します。man -k editor | grep text
これは、すべての実行可能ファイルのリストとエイリアスを表示する解決策です。 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
ALT-を押してみますか? (Altと疑問符を同時に)。 1〜2秒かけてリストを作成します。 bashで動作するはずです。
すべてのコマンドを一覧表示するためのショートカットメソッド。端末を開いて2回--- "tab"ボタンを押してください。それは端末内のすべてのコマンドを表示する
別の方法として、コマンドの便利なリストと簡単な説明を(コマンドに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のようにそれをページャにパイプします。アラ:
apropos -s 1 '' | sort | grep Zip | less
これは、名前に "Zip"が含まれているすべてのコマンド、またはその短い説明がソートされたリストを返し、 "less"ページャをパンプします。 ( "less"を$ PAGERに置き換えてデフォルトのページャを使うこともできます。)
あなたはいつでも次のことができます。
1. Hold the $PATH environment variable value.
2. Split by ":"
3. For earch entry:
ls * $entry
4. grep your command in that output.
シェルは、いずれにせよパスenv varにリストされている場合にのみコマンドを実行します。
それはあなたが使用しているシェルに依存しているということです。これが私が見ている制約です。
私はZSHを使っているので、ここにzshの答えがあります、それは以下の3つのことをします:
ここにあります:
feed_me() {
(alias | cut -f1 -d= ; hash -f; hash -v | cut -f 1 -d= ; typeset +f) | sort
}
あなたがzshを使うなら、これはそれをするべきです。
問題は、タブ補完があなたのパスを検索しているが、すべてのコマンドがあなたのパスにないことです。
Bashを使用してパス内のコマンドを見つけるには、次のようにします。
echo $PATH | cut -d":" -f1
のxの場合。 ls $ xを行います。終わった
これがあなたのbashrcファイルに入れることができる関数です:
関数command-search { oldIFS = $ {IFS} IFS = ":" {PATH} do ls $ p | grep $ 1 done export IFS = $ {oldIFS} }
使用例
$ command-search gnome gnome-audio-profiles-properties * gnome-eject @ gnome-keyring * gnome-keyring- daemon * gnome-mount * gnome-open * gnome-sound-recording * gnome-text-editor @ gnome-umount @ gnome-volume-control * polkit-gnome-authorization * vim.gnome * $
FYI:IFSはbashが文字列を分割するために使用する変数です。
確かにこれを行うにはいくつかのより良い方法があるかもしれません。