私は、新しいシェルを開くか、与えられた一連の引数を使用してプログラムを開始するために定期的に使用する一連のbashコマンド(ライナー)を持っています。を使用するときに私dmenu
のシェルでこれを行うことができるようにしたいので、私のシェルでを定義するだけでは不十分なので、これらのコマンドを専用ファイルに入れる必要があります。ファイルは実行可能でなければなりません。ただし、これは各コマンドに対してファイルを作成する必要があることを意味します。とても迷惑です。dmenu
alias
.bashrc
$PATH
dmenu
シェルを介してアクセスできるように、これらすべてのコマンドをファイルに(または少なくともより便利な方法で)保存する方法はありますか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