나는 새 셸을 열거나 주어진 인수 집합을 사용하여 프로그램을 시작하기 위해 정기적으로 사용하는 일련의 bash 명령(라이너)을 가지고 있습니다. 를 사용할 때 dmenu
내 쉘에서 이 작업을 수행할 수 있기를 원하므로 dmenu
내 alias
쉘에서 를 정의하는 것만으로는 충분하지 않으므로 .bashrc
이러한 명령을 전용 파일에 넣어야 합니다. 파일은 실행 가능해야 하며 $PATH
알려진 dmenu
. 하지만 이는 각 명령에 대해 파일을 만들어야 함을 의미합니다. 매우 짜증납니다.
쉘 및 를 통해 액세스할 수 있도록 이러한 모든 명령을 파일에(또는 적어도 더 편리한 방법으로) 저장하는 방법이 있습니까 dmenu
? 어쩌면 dmenu
... 별칭 파일 읽기 와 같은 것일 수도 있습니다 .
답변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