現在のディレクトリまたはそのサブディレクトリでのみ使用可能なコマンドを作成できますか?たとえば、というコマンド/エイリアスを作成したいとし、cdtheme
次のようなディレクトリ構造があるとします。
~/code
# PROJECTNAME and THEMENAME can be anything the rest of the structure will stay the same
~/code/PROJECTNAME/web/themes/THEMENAME
~/code/projectA/web/themes/theme1
~/code/projectB/web/themes/theme2
~/code/xyzproject/web/themes/randomthemename
cdtheme
次のディレクトリで実行すると、次の結果が得られます。
~/code # error
~/code/projectA # cd to theme1
~/code/projectA/web # cd to theme1
~/code/projectB # cd to theme2
~/code/xyzproject # cd to randomthemename
cdtheme
これは単なる例であり、たとえば、より多くのコマンドを追加したいと思います。私の最初のアイデアは、カスタムコマンド/エイリアス/変数を定義し、自動的にインポートできるcdproject
ディレクトリにファイルを追加できることでした。projectB/.zshrc
編集:明確さと追加された文脈
ベストアンサー1
エイリアスまたは関数を定義または定義解除できます。chpwd
フック。
function set_theme_dir {
case $PWD/ in
~/code/projectA/) alias cdtheme='cd ~/code/projectA/web/themes/theme1';;
~/code/projectB/) alias cdtheme='cd ~/code/projectB/web/themes/theme2';;
*) unalias cdtheme;;
esac
}
chpwd_functions+=(set_theme_dir)
cdtheme
ただし、お客様の要件を考慮すると、常に実行時に現在のディレクトリを定義して分析する方が合理的であると思います。
function cdtheme {
case $PWD/ in
~/code/projectA/) cd ~/code/projectA/web/themes/theme1;;
~/code/projectB/) cd ~/code/projectB/web/themes/theme2;;
*) echo "Error: not inside a project tree" >&2; return 2;;
esac
}
テーマディレクトリがハードコードされているのか、プロジェクトで決定できるのか、プロジェクトディレクトリが何であるかを区別する方法は不明です。以下は、cdtheme
各プロジェクトに独自のGitワークツリーがあり、最初のトピックをアルファベット順に並べ替えると仮定した実装です。
function cdtheme {
emulate -L zsh
setopt err_return
local root
root=$(git rev-parse --show-toplevel)
cd $root/web/themes/theme*([1])
}