2017-09-11 11 views
1

I持って次のコマンドを実行します。xargs経由で複数のコマンドを結合する方法は?

!nohup fswatch -o ~/Notes -e "\\.git.*" | xargs -n 1 -I {} sh ~/auto_commit.sh > /dev/null 2>&1 &

私はauto_commit.shファイルに何があるかインライン化したい:

cd ~/Notes 
git add -A 
git commit --allow-empty-message -am "" 

はこれを行う方法はありますか?私がなってしまった

+0

もし 'sh〜/ auto_commit.sh'を' cd〜/ Notes && git add -A && git commit --allow-empty-message -am "に置き換えると"動作しません。 私は外部スクリプトファイルを使用しないようにして、すべてインラインで実行します。 – Nathan

+0

〜/ Notesフォルダのnohupを起動し、 'git commit -A ...'を使って1つのコマンドにすることはできますか? –

+0

私はこのコマンドがvimイベントによって起動されないので、 '〜/ Notes'ディレクトリにないvimの設定になっています。私はそこにその設定を置き、それをシンボリックリンクすることができますが、システムが 'PWD'と思うものが何であるかはわかりません。 – Nathan

答えて

1

ソリューションでした:あなたの助けのためのウィルバーンウェルとwhjmへ

nohup fswatch -o ~/Notes -e "\\.git.*" | xargs -n 1 -I {} sh -c 'cd ~/Notes; git add -A; git commit --allow-empty-message -m ""' > /dev/null 2>&1 &' 

感謝。

はまた、これは、vimのスクリプトのためだったので、フォーマットが(ケースの他に同様の問題に対する解決策を探しています)多少異なることがありました。ウィルバーンウェルが間違っていた

autocmd BufWinEnter *.note silent! execute '!nohup fswatch -o . -e "\\.git.*" | xargs -n 1 -I {} sh -c ''git add -A; git commit --allow-empty-message -m ""'' > /dev/null 2>&1 &' 

。なお

{..}はサブシェルではなく、 sh -cコマンドは文字列を要求するということです。したがって、中括弧は不要で、私の場合は望ましくないgit commitメッセージが追加されました。

また、このvimスクリプトでvim execute関数を使用すると、コマンド全体を引用符で囲む必要がありました。二重引用符ではなく、一重引用符を二重引用符で囲むと、execute関数は引数を通常の文字列として受け入れることができ、うまくいきました。

関連する問題