별칭 문자열 명령 실행 중

별칭 문자열 명령 실행 중

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

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둘 중 하나)는 필요하지 않습니다. 일반 globbing을 사용할 수 있습니다(이미 사용하고 있으므로 의미가 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)

관련 정보