xargs で位置引数を選択する

xargs で位置引数を選択する

Python がインストールされている場所を開きたいです。使用した場所を確認します。

whereis python | xargs -n 1 echo

出力:


/usr/bin/python3.8

/usr/bin/python3.8-config

/usr/bin/python

/usr/lib/python2.7

/usr/lib/python3.8

/usr/lib/python3.9

/etc/python3.8

/usr/local/lib/python3.8

/usr/include/python3.8

xdg の場所をコピーすることはできますが、それをしたくありません。パイプ演算子を使用して、 を使用して場所を開きたいのですxdg-openが、問題が 1 つあります。上記のリストから引数を選択するにはどうすればよいですか。3 番目の場所を選択するとします。それを実行する方法はありますか。

フォローしようと思ったのですが、うまくいきませんでした。

whereis python | xargs $3 xdg-open

答え1

xargs に渡す前に出力をフィルタリングするだけです:

whereis python | awk '{print $3}' | xargs xdg-open

このawkコマンドは 3 番目の単語のみを出力するので、 に渡すのはそれだけですxargs。もちろん、xargs引数が 1 つしかない場合は を使用することは無意味です。代わりにこれが必要な場合があります。

xdg-open $(whereis python | awk '{print $3}')

または、単にwhichこれを使用して、初め検索文字列の出現箇所$PATH:

xdg-open $(which python)

pythonでは開けないことに注意してくださいxdg-open。これは無意味です。スクリプト言語であるバイナリは言うまでもなく、バイナリを有効に開くことができるグラフィカル プログラムが存在しないからです。

答え2

君にはできないと思うよxargsで- ただし、シェルを使用して実行することもできます。

whereis python | xargs sh -c 'echo "$3"' sh

しかし、あなたの特定の使用例は実際には意味がありません。バナジウムが指摘した

答え3

xargs の目的は、入力のすべての項目をコマンドに繰り返し渡すことです。入力から「選択」するわけではありません。その操作を行う場合は、head、tail、grep などの他のツールを使用する必要があります。例:

whereis python | fmt -1 | tail -n +3 | head -1

関連情報