削除したいパッケージのリストがあります。アンインストーラはpkg_deinstall
パッケージリストをアンインストールパラメータとして使用しません。 foreachループのようなリストからどのようにアンロードしますか?
[root@fbsd01 /usr/ports/editors/vim]# pkg_info | grep proto| sed 's/\([a-z0-9]*\).*/\1/'
bigreqsproto
compositeproto
damageproto
fixesproto
fontsproto
inputproto
kbproto
randrproto
renderproto
xcb
xcmiscproto
xextproto
xf86bigfontproto
xineramaproto
同様のコマンドが機能すると思いますが、ストリームの代わりにパラメータとしてリストを渡す必要があります。pkg_info | grep proto| sed 's/\([a-z0-9]*\).*/\1/' | head -n 1 pkg_deinstall
どのプログラムと構文を使用すべきかについての手がかりを提供してください。個人差があるため、正確な回答ができない場合があります。私の問題が複雑すぎる場合は、誰かがls
ディレクトリ内のファイルに対して何をするかを教えてください。
ベストアンサー1
最も基本的な「foreach」の場合は、xargs
いくつかのパラメータを読み取り、それを別のコマンドラインに追加します。たとえば、次のことを試すことができます。
> cut -d: -f1 /etc/passwd | xargs -n1 echo user:
-d'\n'
ユーザー名にスペース文字を含めることができる場合は、パラメータを渡す必要があります。xargs
同じコマンドに1つの引数をすべて追加するには、次のようにします。
> cut -d: -f1 /etc/passwd | xargs echo users:
より一般的なループの場合は、次のものを使用できます。
> cut -d: -f1 /etc/passwd | while read i; do echo $i; done
今回は、$i
1つ以上のコマンドシーケンスのどこにでも配置できます。入力は一度に1行ずつ読み取られ、変数に保存されますi
。 ²行を分割して複数の変数に保存することもできます。
> cut -d: -f1,6 /etc/passwd --output-delimiter=' ' | \
while read i j; do echo home directory of user $i is $j; done
生ファイル名を繰り返す場合は、次の方が良いです(コメントを参照)。
> for i in *.txt; do echo file: $i; done
—
1. より正確には、システムが許可する金額です。 2.変数
に応じてIFS