以下の内容はhttps://takuya-1st.hatenablog.jp/entry/2018/11/14/013000より取得しました。


xargs でシェルのalias を使えるようにする方法。

xargs で alias が使えない

takuya@:教科書$ find -type d -maxdepth 1  | xargs ll
xargs: ll: そのようなファイルやディレクトリはありません

悲しい。Aliasはあくまで bashエイリアスであり、シェル経由せずにfork するような場合には全く役に立たない。linux のコマンド実行の仕組みを知っていると別に不思議でもなんでもないんだけど初心者にはコレが不思議らしい。

xargs で alias を使う方法

sudo のときと同じように再帰的なalias展開を使えば、なんとかなる時がある。

alias xargs='xargs '

これをすれば 、動く

takuya@:教科書$ find -type d -maxdepth 1  | xargs  ll
./2018-04-23-スキャンファイル:
合計 336K

でもオプションを渡せない。

alias の再帰的な展開に限界があるので、xargsにオプションつけたら、を渡せない

takuya@:教科書$ find -type d -maxdepth 1  | xargs -p ll
xargs: ll: そのようなファイルやディレクトリはありません

あああ、、振り出しに戻る。。

bashを指定したり

 find -type d -maxdepth 1  | xargs -I@ bash -c 'source ~/.bashrc;ll @'

設定を同時ロードするようにシェルを指定したり

 find -type d -maxdepth 1  | xargs -I@ bash -ic 'll @'

シェル経由だとどうしても不都合が

コマンド文字のエスケープがあるので、ファイル名に「空白」 「&」などが挟まると面倒なことになる。

alias を変数として持ってきたり

エイリアスが、bash_aliases変数にあることを利用して

 echo "${BASH_ALIASES[ll]}"
ls -l -h

これをつかって

 find -type d -maxdepth 1  | xargs -I@ ${BASH_ALIASES[ll]} @

などと出来なくもないが、良い解決策はないようです。

めんどくさいけど xargsのラッパを書くしか無い。

どうしても使いたいのであれば、 /usr/local/bin/xargs.sh を作って

引数のaliasを手作業で展開するしか無いと思う。めんどくさいわりに得られるものがないので作るのはしないけど。

#!/bin/bash 
# 引数を受け取ってalias を展開する
#xargs  に渡し直す

結論

諦めましょう。

参考資料

https://unix.stackexchange.com/questions/141367/have-xargs-use-alias-instead-of-binary




以上の内容はhttps://takuya-1st.hatenablog.jp/entry/2018/11/14/013000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14