web-dev-qa-db-ja.com

apt-get update / apt-get upgradeの.shファイル

これは簡単な質問かもしれませんが...

次の内容を含むupdate.shファイルがあります。

Sudo apt-get update
Sudo apt-get upgrade

./update.sh(実行可能ファイルに設定した後)を使用してこれを実行すると、Sudoパスワードの入力を求められます。これは両方のコマンドを実行しますが、基本的にこのスクリプトを実行できるのは1回だけで、apt-get update/upgradeコマンドを処理できますか?

みんな、ありがとう

1
snovosel

Sudoが機能する方法は、デフォルトでは、パスワードを再度要求する15分前になります。そのため、2つのコマンドを使用しても問題なく機能し、apt-get updateの実行時間に応じて1回パスワードを入力する必要があります。

ただし、これはベストプラクティスではありません。代わりに、ファイル内の各コマンドの前にスクリプトを配置するのではなく、スクリプト全体をSudoで実行することをお勧めします。つまり、スクリプトは次のようになります。

#!/bin/bash
apt-get update
apt-get upgrade

そしてそれを実行します

Sudo  ./my_script.sh

ここでは、#!/bin/bash行を使用してbash Shellをインタープリターとして使用していることに注意してください。これは/bin/shとは大きく異なります。あなたがやっていることは違いはありませんが、いくつかの演算子の構文が異なることに注意する必要があります。

ただし、さらに良い方法は、スクリプトを完全に取り除き、必要な機能を果たす関数またはエイリアスを使用することです。スクリプトは、再利用したい大量のコード用です。 2-3行の場合は、~/.bashrcファイル内の関数またはエイリアスで十分です。

個人的には~/.bashrcでこのようなものを作ります

alias agu="Sudo bash -c 'apt-get update && apt-get upgrade'"
3

維持するバージョンについての厄介なプロンプトには、DEBIAN_FRONTEND=noninteractiveを設定することを忘れないでください。

Sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y;

これを行わないと、スクリプトはパッチ適用にハングアップします。したがって、スクリプトでこれを行う場合、次のようにします。

#!/usr/bin/env bash
set -e

patching(){
    # Sudo specified because this was from my bootstrap script for an
    # ec2 instance remove the sudos as previously stated if you are 
    # going to exec it from your current Shell
    Sudo apt-get update -y;
    Sudo DEBIAN_FRONTEND=noninteractive apt-get upgrade -y;
};

patching;

前に述べた方法は機能します...機能しなくなるまで。

この変数を見つけるために書いた以前のスクリプトを参照する必要がありました。

うまくいけば、他の人がパッチ/ブートストラップスクリプトを手伝ってくれるといいのですが。

1
Robert J

単純に実行しない理由:

apt-get update && apt-get upgrade
0
Vijay