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