執行別名字串命令

執行別名字串命令

我編寫了一個簡單的腳本來瀏覽我的開發專案目錄並為每個目錄添加一個別名快捷方式:

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 在子 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)

相關內容