git add --all; git commit -m "some commit message"; git push
プロジェクトを操作するときは、最新のタスクをリモートリポジトリにプッシュするためにこれらのコマンドを順番に実行する必要があることがよくあります。
.zshrc
私はこれら3つのコマンドをカプセル化する関数を書いて、シェルを起動するたびに使用できるようにファイルに保存するのが最善だと思いました。だから私は次の関数を書いた。
gp() {
git add --all
git commit -m "$*"
git push
}
export -f gp
ファイルを取得したり、.zshrc
新しいシェルセッションを開始したとき。次のエラーが発生します。
parse error near `()'
関数定義の正しい構文をオンラインで確認しましたが、上記の関数が私に合うようです。このエラーを解決する方法がわかりません。助けてくれて本当にありがとうございます。
答え1
function-name() command
は1980年代初頭にBourneシェルでサポートされているいくつかの関数定義構文の1つなので、zsh
コードのこの部分は問題ありません。
エラーが発生した場合、parse error near `()'
パーサーが最初に関数定義を必要としないためである可能性が高くなります。
たとえば、次のエラーが発生します。
case x in
gp() {
body
}
afterと同様に、zshには関数定義ではなく、ケースパターンcase x in
が必要です。esac
したがって、問題は表示されていないzshrc部分のどこかにある可能性があります。 Microsoft Windowsシステムでスクリプトを編集するときなど、スクリプトがMSDOS行末(LFではなくCRLF)でフォーマットされている場合でも、構文エラーが頻繁に発生します。dos2unix
これらの問題を解決するために使用できます。
それ以外の場合、これはexport -f function-name
bash 専用の機能です。
zsh
に渡すことはできますが、この危険な関数に対応する関数はありません~/.zshenv
。
"$*"
これはまた、sh
あなたがすることです/bash
なぜなら、彼らはそれを行うより良い方法がないからです。これは$IFS
、当時の内容が何であれ、位置引数をの最初の文字に関連付けます。では、zsh
サイコロロールのままにするのではなく、パラメータ拡張フラグに関連付けるときに使用する区切り文字を明示的に指定できますj
。${(j[ ])@}
たとえば、位置パラメータをスペースに関連付けます。