So verwenden Sie den apt up
Teil der Befehle apt update
und 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 up
Teil der Befehle apt update
und 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 ~/.bashrc
fü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 eval
der 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
, sudo
und sh
so viele Forking):
$ echo "apt "{update,upgrade}";"|sudo sh
Wir können auch verwenden set
, um die gewünschte Sequenz in Positionsparameter umzuwandeln und einfach apt
mit $1
und $2
args 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 set
ist 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/sh
wo 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 while
Rundstrecke 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 echo
dass 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
.
apt
Befehle) 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/grade
ist ein Modifikator, der date
durch ersetztgrade
!#:s/dat/grad
stattdessen
Eine weitere einfache Option xargs
anstelle 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 --help
oder -e
.
printf '%s\0'
wäre es sogar noch besser, xargs
hat 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 string1
mit string2
.