開発プロジェクト ディレクトリを調べて、それぞれにエイリアス ショートカットを追加する簡単なスクリプトを作成しました。
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つの問題があります:
走るのは難しい変数に格納されたコマンド。しかし、実際にはコマンドを変数に格納する必要はありません。
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)