
sudo -i
シェルスクリプトで使用できますか?exit
そのコマンドを使用すると問題が発生するようです...
#!/bin/bash
sudo -i
curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
exit
答え1
すでにテスト済み! ...curlコマンドがどのように修正されるかを確認してください...
#!/bin/bash
sudo -u root curl -L "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo -u root chmod +x /usr/local/bin/docker-compose
exit
答え2
この方法では使用できませんsudo
。スクリプトは対話型ルートシェルを提供し、シェルを終了するまで一時停止します。次に、権限なしでスクリプトの残りのコマンドを実行しますroot
。
あなたのスクリプトならただ特権が必要な操作を実行root
したら、次を使用してスクリプト全体を実行しますsudo
。
$ sudo ./myscript.sh
スクリプトは次のとおりです。
#!/bin/bash
curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
(注:実際には、このコマンドが実際にどのような用途に使用されているのか見ていません。)
そうでなければ、これは個人的な意見であり、少なくともroot
一般的な作業であれば、スクリプトのさまざまな部分を分離して独自のスクリプトに入れるのが良い考えかもしれません。
#!/bin/bash
# script that does things as an ordinary user
# ...
sudo "$HOME/admin_tasks/do_docker_stuff.sudo"
# rest of script
# ...
あるいは、他の人が行うように、スクリプトの各行の前に追加することもできますsudo
。この場合、最初の行にroot
権限が必要なリダイレクトがあるため、失敗するため、「修正」を使用して渡しますsudo bash -c " ... > ... "
。素晴らしく読みやすいスクリプトをめちゃくちゃにしました(やはり個人的な意見です)。
しばらく考えた後:これは非常に長いスクリプトではないため、sudo
スクリプト内で複数の呼び出しを実行するのはおそらく悪い考えではありませんが、呼び出しをcurl
外部に残すことができますsudo
。
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
chmod a+x ./docker-compose
sudo mv ./docker-compose /usr/local/bin/docker-compose
sudo chown root:root /usr/local/bin/docker-compose
最後の3つのコマンドできるdo_local-bin_install.sudo
スクリプトを挿入します(他のスクリプトで再利用できるように):
#!/bin/bash
binary="$1"
chmod a+x "$binary"
chown root:root "$binary"
mv -i "$binary" /usr/local/bin/
スクリプトから呼び出すことができます。
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
sudo ./do_local-bin_install.sudo ./docker-compose
申し訳ありません。これは意識の流れ型の答えです。誰かが理解できることを願っています。