2

したがって、ディレクトリが存在するかどうかを確認する単一行の bash コマンドがあります。存在する場合は git pull し、存在しない場合はリポジトリをクローンします。Windows ボックスで Cygwin を実行していますが、Cygwin でこのコマンドを実行すると、完全に機能します。

if [ -d C:/repo ]; then cd C:/repo && "C:/Program Files (x86)/Git/bin/git.exe" pull; else "C:/Program Files (x86)/Git/bin/git.exe" clone -b develop https://repo.git C:/repo; fi

Puppet から同じコマンドを実行すると、次のようになります。

exec {'checkout repository':
    command => "if [ -d C:/repo ]; then cd C:/repo && "C:/Program Files (x86)/Git/bin/git.exe" pull; else "C:/Program Files (x86)/Git/bin/git.exe" clone -b develop https://repo.git C:/repo; fi"
}

エラーが発生します:

エラー: ' if [ -d C:/repo ]; 次に cd C:/repo && "C:/Program Files (x86)/Git/bin/git.exe" pull; else "C:/Program Files (x86)/Git/bin/git.exe" clone -b development https://repo.git C:/repo; fi' は修飾されておらず、パスが指定されていません。コマンドを修飾するか、パスを指定してください。

理由はありますか?

4

2 に答える 2

1

Puppet はネイティブの Windows プログラムです (cygwin なしで動作します)。コマンド -parameter に記述した内容は、基本的に短い sh(1) スクリプトです。Windows にはデフォルトで sh(1) がありませんが、cygwin によって提供されます。そのため、Windows 上の puppet は、sh(1) を介してコマンドの内容を実行しようとしません。これは、Windows 実行可能ファイルの (絶対) 名であり、オプションのパラメーターが含まれている必要があります。cmd.exe ビルトインを呼び出したい場合は、次のようにする必要がありますcommand => 'cmd /c dir'

于 2013-04-20T15:12:59.760 に答える