and コマンドのapt up
一部を再利用して、エイリアスなしで1行だけで両方のコマンドを順番に実行する方法。apt update
apt upgrade
次のようなものですapt up{date,grade}
。
and コマンドのapt up
一部を再利用して、エイリアスなしで1行だけで両方のコマンドを順番に実行する方法。apt update
apt upgrade
次のようなものですapt up{date,grade}
。
回答:
簡単な方法(より効率的な方法)は、forループを使用することです(1行ですが、ここではわかりやすくするために複数行で示しています)。
for i in {date,grade}; do
apt up${i}
done
賢い方法は~/.bashrc
、これらの2つのコマンドのエイリアスを作成し、再度入力するのを忘れることです。
alias upgrade=' sudo apt update && sudo apt upgrade'
精巧な方法はこれを行うことです:
$ echo sudo" "apt" "up{"date","grade"}" && " :
sudo apt update && sudo apt upgrade && :
何が起きているのか見てみましょう?シェルによって実行される有効なテキスト文字列を作成しています。これで、必要なのはのeval
代わりに使用することだけですecho
。しかしeval
、シェルスクリプトでは一般に推奨されておらず、このコマンドはforループよりも複雑で移植性がありません。evalなしのテーマのバリエーション(これまでの最短ですが、パイプと複数のコマンドecho
、two apt
、sudo
およびsh
非常に多くの分岐のために効率的ではありません):
$ echo "apt "{update,upgrade}";"|sudo sh
またset
、目的のシーケンスを定位置パラメーターに変換apt
し$1
、with および$2
argsを使用して実行することもできます。
$ set {update,upgrade}; echo apt $1 && echo apt $2
apt update
apt upgrade
または、代わりにforループを使用します。これは、デフォルトで位置パラメータを処理するためです。 for variable (sequence)
$ set {update,upgrade} ; for i; do echo apt $i ;done
apt update
apt upgrade
使用することset
は、シェルを頻繁に使用する専門家の間でよく見られる非常に一般的な手法であり、正当な理由により、これは非常に移植性が高く/bin/sh
、配列や{a,b,c}
拡張がない場所で機能します。したがって、POSIX的に移植可能な方法は次のようになりますset update upgrade ; for i; do echo apt $i ;done
。さらに、これは効率的でなければなりません。
または、while
ループルートに進むことができます。
$ echo {date,$'\n',grade}|while read i;do echo apt up${i}; done
apt update
apt upgrade
もちろんecho
、実際のコマンド実行を行わずに実行することを忘れないでください
for i in {date,grade}; do sudo apt up${i}; done
~/.bash_aliases
ます。このファイルはによって自動的に取得され~/.bashrc
ます。
apt
異なる引数を持つコマンド)(更新とアップグレード)ので、私はまだループのために言うよ進むべき道である
for i in date grade; do
upgrate
。
のxargs
代わりに使用する別の簡単なオプションfor
:
echo up{dat,grad}e | xargs -n1 apt
テスト:
$ echo up{dat,grad}e | xargs -n1 echo apt
apt update
apt upgrade
ただし、これらの「単純な」方法は実際に役立つほど単純ではないため、Sergiyのようなシェルエイリアスを好むでしょう。
printf "%s\n" {date,grade} | xargs -I% -n1 echo apt up%
は少し長いかもしれませんが
printf '%s'
--help
またはでエスケープできないため、一般的には良い方法です-e
。
printf '%s\0'
もっと良いでしょう、xargs
nullで終わる引数を処理するフラグがあります