저는 개발 프로젝트 디렉터리를 살펴보고 각각에 대한 별칭 바로가기를 추가하는 간단한 스크립트를 작성했습니다.
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
둘 중 하나)는 필요하지 않습니다. 일반 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)