質問: **「nginx -t」が正しかった場合のみ、「systemctl restart nginx.service」実行したいのですが、下記で合っていますか?** ``` $ sudo nginx -t && systemctl restart nginx.service ``` --- **下記は、上記と何が違うのですか?** ・それぞれ長所短所があれば教えてください ``` sudo sh -c 'nginx -t && systemctl restart nginx.service' ``` ・何れも、幾つでも連結可ですか? ``` $ sudo コマンド && コマンド || コマンド || コマンド $ sudo sh -c 'コマンド && コマンド || コマンド || コマンド' ``` --- **環境** ・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`の引数です。