zsh完了:/ devでブロックデバイスを完了します。

zsh完了:/ devでブロックデバイスを完了します。

/dev私のスクリプトでは、ブロックデバイスを完成させる必要があります。

my_script.sh <TAB>

これにより、リスト内のすべてのディスクが完了して提供されます/dev/(サブディレクトリにはありません)。/devたとえば、

my_script.sh <TAB>
my_script.sh /dev/

my_script.sh /dev/<TAB>
sda sdb sdc mmcblk0p1

my_script.sh /dev/sd
sda sdb sdc 

説明されているとおりに機能するように、完成をどのように変更する必要がありますか?

_arguments -S : \
    '--foo' \
    '--bar' \
    '*:file:_files'

ベストアンサー1

努力する:

_arguments -S : \
    '--foo' \
    '--bar' \
    '*:block devices:(( /dev/*(-%b:t) ))'

(-%b:t)%bシンボリックリンクの確認後に選択するブロックデバイスを選択するグローバル修飾子であり-、修飾子はそのファイルのすべてのファイルのみを選択:tします。t

_files、を使用できます。特典たとえば、塗り絵から:

_arguments -S : \
    '--foo' \
    '--bar' \
    '*:block devices:_files -W /dev -g "*(-%b)"'

-Wここで_files指定されたオプションを使用してWこれらのファイルを検索しますが、/devその中でより多くのブロックデバイスを見つけるためにサブディレクトリも提供します。

Linuxでは、次のものを使用できます。

    '*:block devices:_files -W /sys/class/block'

または:

    '*:block devices:(( /sys/class/block/*(:t) ))'

これらのブロックデバイスのカーネル名のみを取得します。

おすすめ記事