So verwenden Sie den apt upTeil der Befehle apt updateund wieder apt upgrade, um beide Befehle nacheinander in nur einer Zeile ohne Alias auszuführen.
So etwas wie : apt up{date,grade}.
So verwenden Sie den apt upTeil der Befehle apt updateund wieder apt upgrade, um beide Befehle nacheinander in nur einer Zeile ohne Alias auszuführen.
So etwas wie : apt up{date,grade}.
Antworten:
Der einfache (und effizientere) Weg ist die Via-for-Schleife (in einer Zeile, hier wird sie jedoch der Übersichtlichkeit halber in mehreren Zeilen angezeigt):
for i in {date,grade}; do
apt up${i}
done
Der clevere Weg ist, einen Alias ~/.bashrcfür diese beiden Befehle zu erstellen und zu vergessen, ihn immer wieder neu einzugeben:
alias upgrade=' sudo apt update && sudo apt upgrade'
Der aufwändige Weg ist, dies zu tun:
$ echo sudo" "apt" "up{"date","grade"}" && " :
sudo apt update && sudo apt upgrade && :
Sehen Sie, was passiert? Wir erstellen eine gültige Textzeichenfolge, die von der Shell ausgeführt werden soll. Jetzt müssen Sie nur noch verwendeneval anstelle von verwenden echo. Aber in evalder Regel nicht in Shell - Skripten empfohlen und dieser Befehl ist viel mehr gewunden und nicht tragbar als die for - Schleife. Variation des Themas ohne eval (und kürzeste so weit, aber nicht effizient durch Rohr und mehrere Befehle echo, zwei apt, sudound shso viele Forking):
$ echo "apt "{update,upgrade}";"|sudo sh
Wir können auch verwenden set, um die gewünschte Sequenz in Positionsparameter umzuwandeln und einfach aptmit $1und $2args auszuführen :
$ set {update,upgrade}; echo apt $1 && echo apt $2
apt update
apt upgrade
Oder verwenden Sie alternativ erneut die for-Schleife, da standardmäßig Positionsparameter verarbeitet werden, wenn Sie keine Sequenz in der Schleife angeben for variable (sequence)
$ set {update,upgrade} ; for i; do echo apt $i ;done
apt update
apt upgrade
Die Verwendung setist eine sehr verbreitete Technik, die ich unter Fachleuten sehe, die viel mit Muscheln arbeiten, und das aus gutem Grund - sie ist sehr portabel und funktioniert dort, /bin/shwo Sie keine Arrays oder {a,b,c}Erweiterungen haben. So wäre POSIX-ly tragbarer Weg set update upgrade ; for i; do echo apt $i ;done. Darüber hinaus sollte dies effizient sein.
Oder wir können die whileRundstrecke gehen :
$ echo {date,$'\n',grade}|while read i;do echo apt up${i}; done
apt update
apt upgrade
Denken Sie natürlich daran, es auszuführen, ohne echodass die eigentliche Befehlsausführung stattfinden soll
for i in {date,grade}; do sudo apt up${i}; done
~/.bash_aliases. Diese Datei sollte automatisch von bezogen werden ~/.bashrc.
aptBefehle) mit unterschiedlichen Argumenten (Aktualisieren und Aktualisieren) ausführen möchten. Ich sage also immer noch, dass die Schleife der
for i in date grade; do
upgrate.
Sie können auch die Bash- Verlaufserweiterung verwenden , um Teile der aktuellen Befehlszeile abzurufen und zu ändern:
$ apt update; !#:s/date/grade
apt update; apt upgrade;
Reading package lists... Done
...
!# ist die aktuelle Zeile:s/date/gradeist ein Modifikator, der datedurch ersetztgrade!#:s/dat/gradstattdessen
Eine weitere einfache Option xargsanstelle von for:
echo up{dat,grad}e | xargs -n1 apt
Prüfung:
$ echo up{dat,grad}e | xargs -n1 echo apt
apt update
apt upgrade
Ich würde jedoch einen Shell-Alias wie Sergiy bevorzugen, da diese „einfachen“ Methoden nicht einfach genug sind, um tatsächlich nützlich zu sein.
printf "%s\n" {date,grade} | xargs -I% -n1 echo apt up%obwohl dies etwas länger ist
printf '%s'ist im Allgemeinen eine gute Praxis, da Sie nicht entkommen können, z . B. mit --helpoder -e.
printf '%s\0'wäre es sogar noch besser, xargshat eine Flagge, um null terminierte
Erstellen Sie eine Funktion wie folgt:
repeat() {
for suffix in "${@:2}";
do
eval "$1""$suffix";
done
}
Dann kannst du rennen repeat 'apt up' {date,grade} . Dies hat den Vorteil, dass es für völlig andere Befehle wiederverwendbar ist, obwohl Sie dadurch keine Eingabe für diesen Befehl ersparen müssen.
Ich würde sicherlich einigen der anderen Antworten zustimmen, dass so etwas wahrscheinlich nützlicher ist:
alias apt-up='apt update && apt upgrade'
Die Antwort von @ muru veranlasste mich, mich über die Erweiterung der Geschichte zu informieren, und ich fand eine andere Variante
$ sudo apt update
$ ^dat^grad^
^string1^string2^entspricht !!:s/string1/string2/, welche den letzten Befehl und ersetzt nimmt string1mit string2.