개발 프로젝트 디렉터리를 탐색하고 각 디렉터리에 별칭 바로가기를 추가하는 간단한 스크립트를 작성했습니다.
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
두 가지 질문이 있습니다.
달리기가 귀찮다변수에 저장된 명령입니다.그러나 실제로 명령을 변수에 저장할 필요는 없습니다.
alias "${cur_dir}"="code $d"
달리는 곳에서 하면 됩니다$cmd
.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)