1

単純なコマンドを実行するのは非常に簡単です。しかし、コマンドがワンライナーではなくスクリプトブロックである場合、どのように書くのが最善の方法ですか?

exec {
    command => 'for i in vars
                do
                    echo $i
                    more-statements
                done'; 
}

私が考えることができるいくつかの方法は次のとおりです。

  • 適切なエスケープを使用してスクリプト ブロックを記述し、それを機能させます (非常にきちんとしたオプションではありません)。
  • スクリプト ブロックを file.sh に記述し、コマンドで実行します。

他のオプションはありますか?

4

1 に答える 1

4

スクリプトブロックとして書きたい場合は、通常、あなたが説明した方法で行います。

exec { 'Multi line exec':
    command => "source foo.sh
echo 'bar'
touch /var/tmp/baz
",
    path => '/usr/bin:/usr/sbin:/bin:/usr/local/bin',
    provider => 'shell',
}

$一般に、これを行うことはお勧めしません。これは、エスケープすることで少し複雑になるためです (そして、変数のパペット使用と実際のシェル変数の違い$...

スクリプトの複雑さにもよりますが、Puppet 以外のツールでスクリプトを実行したい場合は、通常、fileタイプのあるディスク上のファイルとしてスクリプトを作成し、exec にスクリプトを実行させます。

または、さらに良いことに、シェルの部分を、依存関係とパラメータがない限り、個別の exec リソースに分割します。

于 2015-05-11T20:29:08.617 に答える