エイリアス文字列コマンドの実行

エイリアス文字列コマンドの実行

開発プロジェクトディレクトリに移動し、各ディレクトリにエイリアスショートカットを追加する簡単なスクリプトを作成しました。

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

2つの質問があります。

  1. 走るのが面倒変数に格納されたコマンドです。しかし、実際にはコマンドを変数に保存する必要はありません。alias "${cur_dir}"="code $d"走る場所でやればいいです$cmd

  2. 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

おすすめ記事