端末回線にエイリアスを設定するにはどうすればよいですか?


9

git-goこの端末回線にエイリアスを簡単に設定したい:

git commit -m "init "; git push; git status

したがって、git-goと入力すると、この行が入力されます。

どうやってやるの?私が見た答えは、パラメーターのないコマンドのエイリアスのみをカバーしています。しかし、任意の端末回線にエイリアスを設定したいと思います。


何を試しましたか?他にどの質問を読みましたか?askubuntu.com/q/17536/507051はそれを非常によく説明しています、あなたの質問は正確には何ですか?
デザート

私の問題は、外側の引用符に一重引用符ではなく二重引用符を使用することでした。
Philip Rego

外側に二重引用符を使用し、内側に単一引用符を使用する他の方法でも同じことができます。
Videonauth 2019年

回答:


13

これは、エイリアスを設定するのと同じ方法で行います。

alias git-go='git commit -m "init "; git push; git status'

それがトリッキー取得状況はありませんエイリアスは、コマンドを実行し、そのコマンドに引数を渡し、またエイリアスは、複数のコマンドを実行した場合でも区切ったときに;、代わりにあなたは、独自のコマンドライン引数を受け入れ、使用するエイリアスをしたいときです。

たとえば、そのエイリアスの名前のに書き込んものは最後に貼り付けられ、コマンドライン引数として3番目のgitコマンドの後に渡されgit statusます。(実際には、次のテキストがそのまま残され、エイリアス名がその定義に置き換えられるのと同じくらい、次のテキストが最後に貼り付けられることはそれほどありません。)

したがって、引数なしでエイリアスを実行できます。これは機能し、最後のコマンドはgit status次のとおりです。

git-go

または、渡したい引数を指定して実行することもできますgit status。たとえば、この方法で実行すると、最後のコマンドはgit-status --show-stash次のようになります。

git-go --show-stash

Bash(およびその他のBourneスタイルのシェル)でエイリアスを使用してできないことは、エイリアスにコマンドライン引数を受け入れさせ、末尾以外の場所に配置させることです。

たとえばgit-go、コミットメッセージに使用する引数を受け入れたいとします。これをエイリアスとして書き込むことはできません。解決策は、代わりにシェル関数としてそれを書くことです:

git-go() { git commit -m "$1"; git push; git status; }

シェル関数の定義では、位置パラメータ$1$2などが、シェル関数に渡されるコマンドライン引数の値を保持します。エイリアス展開は実際にはマクロ処理の一種であり、シェルがコマンドを解析する非常に早い段階で行われるため、エイリアスにはこれに対応する機能はありません。

もちろん、Videonauthが示唆しているように、定義で定位置パラメーターを使用する必要がない場合でも、それをシェル関数として書くことができます。


1
さらに良いのgit-goは、PATHに名前が付けられたスクリプトを配置してgit go動作することです。
D.ベンノーブル

10

次の~/.bash_aliasesように、ファイル内で関数を宣言できます。

git-go(){
    git commit -m "init "
    git push
    git status
}

または、次のように同じファイルにエイリアスを作成できます。

alias git-go='git commit -m "init "; git push; git status'

. ~/.bash_aliases変更した後は、ターミナルを再度開くか、ファイル()を読み込むことを忘れないでください。


1
エイリアスの代わりにシェル関数を作成する利点の1つは、引用符をネストする必要がないことです。したがってこの答えは、OPが私の問題よりも直接的な問題であることが判明した中心的な問題に対処します。
Eliah Kagan

@EliahKaganあなたの質問はより詳細ですが、どちらもその質問には問題ありません。よろしくお願いします。
Videonauth 2019年

4

gitコマンドを処理しているときに、特にのエイリアスを追加するための構文も知りたい場合がありますgit

git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'

これにより、ローカルgit構成(~/.gitconfig)に新しいエイリアスが追加され、発行できるようになります

git go

gitリポジトリ内の場合。実行git goすると必ずシェルが呼び出され、コマンドgit commit -m "init"; git push; git statusがシェルに渡されます。

詳細については、gitのドキュメント を参照してください。


3

それは引用問題でした。私はこれを試しました:

alias="git commit -m "init "; git push; git status"

しかし、このエラーが発生しました:

bash: ; git push; git status: command not found

ネストされた引用符を誤って使用していたため、このエラーが発生しました。正しい構文は次のとおりです。

alias='git commit -m "init "; git push; git status'

または:

alias="git commit -m 'init '; git push; git status"

または、コミットメッセージに空白がない場合は引用符なし:

alias="git commit -m init; git push; git status"

この回答を投稿していただきありがとうございます(私の回答とVideonauthは引用の問題にあまり重点を置いていません)。好奇心から、コミットメッセージの末尾にスペースが必要なのはなぜですか?
Eliah Kagan

以前は手動でこの行を貼り付けていましたが、スペースの後にメッセージを追加していましたが、ここでは意味がないので削除しました。
Philip Rego

1
その場合は、引用する必要はありませんinit。シェル扱い'init'"init"init同じ。(したがって、元のバージョンを元に戻し、新しいバージョンを表示して、ネストされた引用符が必要な状況を示すことができます。)メッセージの残りの部分を追加できることについては、コマンドラインとして渡すことができます。 (Videonauthと私の回答に示されているように)エイリアスではなく関数を定義した場合の引数。たとえば、定義することができますgit-go() { git commit -m "init $1"; git push; git status; }(これは私の答えにありますが、の"init $1"代わりに"$1")。
Eliah Kagan

ありがとう、それが私が次に試したかったことです。
Philip Rego
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.