별칭 문자열 명령 실행

별칭 문자열 명령 실행

개발 프로젝트 디렉터리를 탐색하고 각 디렉터리에 별칭 바로가기를 추가하는 간단한 스크립트를 작성했습니다.

shopt -s dotglob #Use shopt -u dotglob to exclude hidden directories
find ~/development/* -prune -type d | while IFS= read -r d; do 
    cur_dir="${d##*/}"
    cmd="alias ${cur_dir}=\"code $d\""
    echo "executing: $cmd"
    $cmd
done

출력은 다음과 같습니다.

executing: alias project-1="code /home/my_user/development/project-1"
./alias_for_projects.sh: line 6: alias: /home/my_user/development/project-1": not found
...

다음 명령을 복사하여 실행하면:

alias project-1="code /home/my_user/development/project-1"

작동합니다. 스크립트를 어떻게 수정하나요?

답변1

두 가지 질문이 있습니다.

  1. 달리기가 귀찮다변수에 저장된 명령입니다.그러나 실제로 명령을 변수에 저장할 필요는 없습니다. alias "${cur_dir}"="code $d"달리는 곳에서 하면 됩니다 $cmd.

  2. alias하위 쉘에서 실행 중 입니다 . Bash는 서브셸에서 파이프된 명령을 실행합니다( lastpipe설정되지 않은 경우). 그러나 파이프는 필요하지 않습니다 find(또는 둘 다). 일반 와일드카드를 사용할 수도 있습니다(이미 사용하고 있으므로 find의미가 떨어집니다).

포괄적인:

shopt -s dotglob
for d in ~/development/*/; do         # trailing slash - only directories match
    cur_dir="${d%/}"                  # strip trailing slash
    cur_dir="${cur_dir##*/}"
    alias "${cur_dir}"="code $d"
done

답변2

모든 댓글을 읽은 후 스크립트를 다음과 같이 수정했습니다.

shopt -s dotglob #Use shopt -u dotglob to exclude hidden directories
while IFS= read -r d; do 
    cur_dir="${d##*/}"
    #echo "${cur_dir}"="code $d"
    alias "${cur_dir}"="code $d"
done <<<$(find ~/development/* -prune -type d)

관련 정보