At work, we share tips and tricks, and one of my colleagues recently called me out on the following stanza I posted:
I like this [ansible] one for Debian based systems:
- name: "Apt update, Full-upgrade, autoremove, autoclean"
become: yes
apt:
upgrade: full
update_cache: yes
autoremove: yes
autoclean: yes
And if you’re trying to figure out how to do that in Shell:
apt-get update && apt-get full-update -y && apt-get autoremove -y && apt-get autoclean -y
His response was “Surely you’re not logging into bash as root”. I said “I normally sudo -i
as soon as I’ve logged in. I can’t recall offhand how one does a sudo for a string of command && command
statements”
Well, as a result of this, I looked into it. Here’s one comment from the first Stack Overflow page I found:
You can’t run multiple commands from
sudo
– you always need to trick it into executing a shell which may accept multiple commands to run as parameters
So here are a few options on how to do that:
sudo -s whoami \; whoami
(link to answer)sudo sh -c "whoami ; whoami"
(link to answer)- But, my favourite is from this answer:
An alternative using eval so avoiding use of a subshell:
sudo -s eval 'whoami; whoami'
Why do I prefer the last one? Well, I already use eval for other purposes – mostly for starting my ssh-agent over SSH, like this: eval `ssh-agent` ; ssh-add