Alias
xargs 不使用我的“ls”別名
在 AIX 上(但這也發生在 HP-UX 上),我的路徑中有 GNU ls 並且它也被別名為
ls
.當我使用 xargs 時,它使用標準 Unix
ls
而不是別名。例如(
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)。