現在の git プロジェクトのルートに移動できるようにエイリアスを設定したいのですcd
が、それが見つからない場合は、通常のホーム ディレクトリに移動します。
git ルートに設定しようとしてHOME
いますが、それが見つからない場合は通常のホーム変数に設定しようとしています。
alias cd='HOME="${$(git rev-parse --show-toplevel):-~}" cd'
しかし、うまくいきません。
現在の git プロジェクトのルートに移動できるようにエイリアスを設定したいのですcd
が、それが見つからない場合は、通常のホーム ディレクトリに移動します。
git ルートに設定しようとしてHOME
いますが、それが見つからない場合は通常のホーム変数に設定しようとしています。
alias cd='HOME="${$(git rev-parse --show-toplevel):-~}" cd'
しかし、うまくいきません。
値が設定されていない場合のフォールバック句を除いて、内でコマンドを実行することはできません${}
(POSIX sh または bash では、あらゆる種類の奇妙な構文が許可される zsh で実行可能である可能性があります)。
とにかく、関数を使用する場合、必要なゆがみははるかに少なくなります。
# yes, you can call this cd, if you *really* want to.
cdr() {
if (( $# )); then
command cd "$@"
else
local home
home=$(git rev-parse --show-toplevel 2>/dev/null) || home=$HOME
command cd "$home"
fi
}
ノート:
command cd
cd
再帰ではなく、実際の実装を呼び出すために使用されます。もちろん、パラメータ展開内でコマンドを実行することは可能です。
まあ、失敗の側だけで、それは次のとおりです。
$ unset var
$ echo ${var:-"$(echo "hello world!")"}
そのため、失敗側を使用すると、git コマンドが実行される場合があります。var が空であると仮定します。
unset var
var=${var:-"$(git rev-parse --show-toplevel 2>/dev/null)"}"
しかし、それは次のようにするとより簡単になります:
var="$(git rev-parse --show-toplevel 2>/dev/null)"
その後も var がまだ空の場合は、次を使用します。
HOME=${var:-~} builtin cd
これにより、次の結果が得られます。
var="$(git rev-parse --show-toplevel 2>/dev/null)"; HOME=${var:-~} builtin cd
エイリアスで次のように使用できます。
alias cdr='var="$(git …)"; HOME=${var:-~} builtin cd'