10

I'm currently getting into Linux and want to write a Bash script which sets up a new machine just the way I want it to be.

In order to do that I want to install different things on it, etc.

What I'm trying to achieve here is to have a setting at the top of the Bash script which will make APT accept all [y/n] questions asked during the execution of the script.

A question example I want to automatically accept:

After this operation, 1092 kB of additional disk space will be used. Do you want to continue? [Y/n]

I just started creating the file, so here is what I have so far:

#!/bin/bash

# Constants

# Set APT to accept all [y/n] questions
>> some setting here <<

# Update and upgrade APT
apt update;
apt full-upgrade;

# Install terminator
apt install terminator
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Chris
  • 379
  • 1
  • 2
  • 10

5 Answers5

15

apt is meant to be used interactively. If you want to automate things, look at apt-get, and in particular its -y option:

-y, --yes, --assume-yes

Automatic yes to prompts; assume "yes" as answer to all prompts and run non-interactively. If an undesirable situation, such as changing a held package, trying to install an unauthenticated package or removing an essential package occurs then apt-get will abort. Configuration Item: APT::Get::Assume-Yes.

See also man apt-get for many more options.

mivk
  • 13,452
  • 5
  • 76
  • 69
4

With apt:

apt -o Apt::Get::Assume-Yes=true install <package>

See: man apt and man apt.conf

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Cyrus
  • 84,225
  • 14
  • 89
  • 153
3

If you indeed want to set it up once at the top of the file as you say and then forget about it, you can use the APT_CONFIG environment variable. See apt.conf.

echo "APT::Get::Assume-Yes=yes" > /tmp/_tmp_apt.conf
export APT_CONFIG=/tmp/_tmp_apt.conf

apt-get update
apt-get install terminator
...
Christian Fritz
  • 20,641
  • 3
  • 42
  • 71
1

You can set up APT to assume 'yes' permanently as follows:

echo "APT::Get::Assume-Yes \"true\";\nAPT::Get::allow \"true\";" | sudo tee -a  /etc/apt/apt.conf.d/90_no_prompt
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
logbasex
  • 1,688
  • 1
  • 16
  • 22
0

Another easy way to set it at the top of your script is to use this command:

alias apt-get="apt-get --assume-yes"

This will cause all subsequent invocations of apt-get to include the --assume-yes argument. For example, apt-get upgrade would automatically get converted to apt-get --assume-yes upgrade by Bash.

Please note that this may cause errors, because some apt-get subcommands do not accept the --assume-yes argument. For example, apt-get help would be converted to apt-get --assume-yes help which returns an error, because the help subcommand can't be used together with --assume-yes.

Rotstein
  • 87
  • 1
  • 4