dmenuを使用してシェルエイリアスにアクセスする

dmenuを使用してシェルエイリアスにアクセスする

私は、新しいシェルを開くか、与えられた一連の引数を使用してプログラムを開始するために定期的に使用する一連のbashコマンド(ライナー)を持っています。を使用するときに私dmenuのシェルでこれを行うことができるようにしたいので、私のシェルでを定義するだけでは不十分なので、これらのコマンドを専用ファイルに入れる必要があります。ファイルは実行可能でなければなりません。ただし、これは各コマンドに対してファイルを作成する必要があることを意味します。とても迷惑です。dmenualias.bashrc$PATHdmenu

シェルを介してアクセスできるように、これらすべてのコマンドをファイルに(または少なくともより便利な方法で)保存する方法はありますかdmenu?たぶんdmenu...エイリアスファイルの読み込みのようなものかもしれません。

答え1

すべてのエイリアスを1つのファイル(たとえば)に入れると、~/.aliases.sh次のことができます。

#!/bin/bash

. ~/.aliases.sh

alias |
  awk -F '[ =]' '{print $2}' |
  dmenu |
  xargs -ICMD bash -O expand_aliases -c $'. aliases.sh\nCMD'

答え2

dmenuにパイプして結果を実行するスクリプトを作成する必要があります。

以下はサンプルスクリプトです。

#!/bin/bash
cachedir=${XDG_CACHE_HOME:-"$HOME/.cache"}
if [ -d "$cachedir" ]; then
    cache=$cachedir/dmenu_run
else
    cache=$HOME/.dmenu_cache # if no xdg dir, fall back to dotfile in ~
fi

if [ -f ~/.bash_aliases ]; then
  aliases=( ~/.bash_aliases )
fi

if [ ~/.bash_functions ]; then
  functions=( ~/.bash_functions )
fi

source $aliases

cmd=`(
    IFS=:
 if stest -dqr -n "$cache" $PATH || stest -fqr -n "$cache" "$aliases" || stest -fqr -n "$cache" "$functions"; then
          (
            stest -flx $PATH
            alias | awk -F '[ =]' '{print $2}'
            compgen -A function
          ) | sort -u | tee "$cache" | dmenu "$@"
    else
        dmenu "$@" < "$cache"
    fi
)`

if [ -f ~/.bash_aliases ]; then
    if [ ! -z "$(grep '^alias' $aliases|cut -d'=' -f1|grep $cmd)" ] || [ -z $(which $cmd) ]; then
        echo -e "source ~/.bash_aliases \n $cmd" | bash -O expand_aliases &
    else
        exec $cmd &
    fi
fi

源泉

関連情報