我有一个简短的脚本,其中包含我最喜欢的默认值,我的系统上的所有 shell 都可以访问(在不同的时间我使用 Dash、Bash 和 Fish)~/bin
。PATH
它很小:
!/usr/bin/env sh
exec xargs -rd\\n "$@"
调用该脚本x
以避免与期望标准xargs
默认值的脚本发生冲突。如果您尝试替换xargs
自己,我不建议这样做,请确保您~/bin
在 PATH 中的显示高于 system xargs
。which -a xargs
告诉我唯一xargs
存在/usr/bin/xargs
于我的系统中,所以我知道我的主目录/home/stephen/bin
,必须出现在它之前,如下所示:
$ echo "$PATH"
/home/stephen/bin:...:/usr/bin:...
无论哪种方式,作为所有程序都可以访问的脚本,这意味着您可以执行类似find|x grep
和sh -c 'x ...'
.
如果您使用 Bash 并且更喜欢别名,您也可以只使用:
alias x=xargs -rd\\n\ # \n delim, don't run on empty in, + alias expansion
注意别名扩展的尾随空格。这使您可以链接别名。例如,如果除了上述别名之外,我还有一个名为 grep 的别名g
,则以下内容将起作用:
# extended regex, skip binaries, devices, sockets, & dirs, colored, & line
# -buffered. use a non-canonical alias instead of GREP_OPTIONS which may wreck
# assuming scripts
alias g='grep -EID skip -d skip --color=auto --line-buffered'
$ find|x g foo
x
/ xargs
script 方法本身不能有效地做到这一点。
由于我在 shell 之间切换并主要使用一台 PC,因此我将少数我需要的别名作为单独的脚本保存在~/bin
helper 脚本中,以及与 shell 无关的别名,该脚本~/.sh_aliases
由~/.shrc
,提供~/.bashrc
,并且~/.config/fish/config.fish
它们都支持类似 Bash 的别名语法. 如果我经常在多台 PC 上工作,我可能会尝试将它们整合到一起~/.bashrc
。