これにより、/usr/bin/which --all git
私が経験したすべてのことが表示されます。git
$PATH
最初の行は有効な行を示しています。
下図のgit
バージョンが/home/kmodi/stowed/bin/git
有効なバージョンです。
今、結果の実際のファイル名を知りたいです。
したがって、/home/kmodi/stowed/bin/git
シンボリックリンクの場合、それが何を指しているのか知りたいのです。
実行すると、/usr/bin/which --all git | xargs \ls -Fpl
シンボリックリンク参照が表示されます。しかし、出力結果が混乱しています。リストされたファイルの元の順序は維持されません!この出力(下)を見ると、そのバージョンが/cad/..
有効なgit
バイナリパスであると仮定できます。
xargs
この順序を維持する方法はありますか?
重要な場合はtcsh
シェルを使用しています。
Johnのヒントのおかげで、-n 1
ついにお気に入りのソリューションがありました。とても汚いです。その引用!(ありがとうございますtcsh
)しかしうまくいきます。
alias whichall '/usr/bin/which --all \!* \\
| xargs -n 1 \ls -Fpl --color=always \\
| awk -v OFS="" '"'"'{$1=$2=$3=$4=$5=$6=$7=$8=""; print $0}'"'"' \\
| \sed '"'"'/^$/d'"'"'; \\
'
答え1
このxargs
コマンドは引数の順序を保持しますが、すべての引数を のインスタンスに渡すので、デフォルトではls
アルファベット順に出力が提供されます。必要な動作を得るには、一度に1行の出力のみを渡すようにコマンドに引数を追加するか、 GNU実装を使用している場合はファイルリスト-n 1
をソートしないようにxargs
指示するオプションを追加します。ls
ls
-U
アクションls
:
$ ls -lad /usr/bin /etc
drwxr-xr-x. 146 root root 12288 May 18 09:46 /etc
dr-xr-xr-x. 2 root root 57344 Dec 12 15:30 /usr/bin