dmenu를 사용하여 쉘 별칭에 액세스

dmenu를 사용하여 쉘 별칭에 액세스

나는 새 셸을 열거나 주어진 인수 집합을 사용하여 프로그램을 시작하기 위해 정기적으로 사용하는 일련의 bash 명령(라이너)을 가지고 있습니다. 를 사용할 때 dmenu내 쉘에서 이 작업을 수행할 수 있기를 원하므로 dmenualias쉘에서 를 정의하는 것만으로는 충분하지 않으므로 .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

원천

관련 정보