cd
私は現在のgitプロジェクトのルートに移動します。見つからない場合は、私の通常のホームディレクトリに移動します。
私はHOME
をgit rootに設定しようとしています。見つからなければ、私の通常のホーム変数に設定しようとしています。
alias cd='HOME="${$(git rev-parse --show-toplevel):-~}" cd'
でも動作しません。
cd
私は現在のgitプロジェクトのルートに移動します。見つからない場合は、私の通常のホームディレクトリに移動します。
私はHOME
をgit rootに設定しようとしています。見つからなければ、私の通常のホーム変数に設定しようとしています。
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 "[email protected]"
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のコマンドが実行されることがあります。
unset var
var=${var:-"$(git rev-parse --show-toplevel 2>/dev/null)"}"
しかし、それが持つシンプルな次のようになります:そのVARと仮定すると は空です
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'
これは私が探していた元の答えです。 – theonlygusti
賢い。ブラボー!! –
'command cd'と' builtin cd'はどちらですか?私はこれまでに書いたすべての関数に 'builtin'を使っています:/ – theonlygusti
' $(git rev-parse --show-toplevel) 'のstderrを隠すことは可能ですか? git reposがなければエラーとなります。 – theonlygusti
もちろん。サブシェルの中に '2/dev/null'を入れてください。 –