我編寫了一個簡單的腳本來瀏覽我的開發專案目錄並為每個目錄添加一個別名快捷方式:
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 在子 shell 中執行管道命令(除非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)