Alias

xargs 不使用我的“ls”別名

  • May 17, 2020

在 AIX 上(但這也發生在 HP-UX 上),我的路徑中有 GNU ls 並且它也被別名為ls.

當我使用 xargs 時,它使用標準 Unixls而不是別名。

例如(flocate是一個查找搜尋主題的確切路徑的函式):

flocate mirrorvg | xargs ls -lh
ls: illegal option -- h
usage: ls [-1ACFHLNRSabcdefgiklmnopqrstuxEUX] [File...]

ls -lh /usr/sbin/mirrorvg
-r-xr-x--- 1 root system 37K apr  3  2014 /usr/sbin/mirrorvg*

為什麼 xargs 不使用ls別名?

該命令xargs只能執行命令,不能執行別名。然而,GNU 並行能夠執行函式:

The command must be an executable, a script, a composed
command, or a function. If it is a function you need to export
-f the function first. An alias will, however, not work (see
why http://www.perlmonks.org/index.pl?node_id=484296).

所以我會推薦:

  • 為 xargs 提供您要使用的 ls 版本的完整路徑(或一個明確的名稱,可能gls取決於它在系統上的安裝方式),或者,如果您的 shell 允許,
  • 定義ls為函式(function ls { gls "$@"; }; export -f ls在 bash 中)並使用 GNU 並行而不是 xargs(parallel -j1如果您想使用單個 CPU)。

引用自:https://unix.stackexchange.com/questions/199472