設定ファイルの文法エラーをチェックしてから、Nginx再起動


**「nginx -t」が正しかった場合のみ、「systemctl restart
nginx.service」実行したいのですが、下記で合っていますか？**

[code]

    $ sudo nginx -t && systemctl restart nginx.service
    
[/code]

* * *

**下記は、上記と何が違うのですか？**  
・それぞれ長所短所があれば教えてください

[code]

    sudo sh -c 'nginx -t && systemctl restart nginx.service'
    
[/code]

・何れも、幾つでも連結可ですか？

[code]

    $ sudo コマンド && コマンド || コマンド || コマンド
    $ sudo sh -c 'コマンド && コマンド || コマンド || コマンド'
    
[/code]

* * *

**環境**  
・CentOS7  
・Nginx




試してみればすぐにわかることだとは思いますが、

`$ sudo nginx -t && systemctl restart nginx.service`

`nginx`は管理者権限で実行され、それが成功すると、`systemctl`が現在のユーザの権限で実行されます。これが期待通りかどうかはわかりません。`sudo`の引数は`&&`の直前までです。

`sudo sh -c 'nginx -t && systemctl restart nginx.service'`

`sh`が管理者権限で実行されるので、その中で実行される`nginx`も`systemctl`も管理者権限で実行されます。行末まですべてが`sudo`の引数です。




試してみればすぐにわかることだとは思いますが、

`$ sudo nginx -t && systemctl restart nginx.service`

`nginx`は管理者権限で実行され、それが成功すると、`systemctl`が現在のユーザの権限で実行されます。これが期待通りかどうかはわかりません。`sudo`の引数は`&&`の直前までです。

`sudo sh -c 'nginx -t && systemctl restart nginx.service'`

`sh`が管理者権限で実行されるので、その中で実行される`nginx`も`systemctl`も管理者権限で実行されます。行末まですべてが`sudo`の引数です。

