如何使用带有别名的“nice”命令?
举个例子:
alias list=ls
list # works
nice -10 list # doesn't work
我怎样才能使最后一行工作?
如何使用带有别名的“nice”命令?
举个例子:
alias list=ls
list # works
nice -10 list # doesn't work
我怎样才能使最后一行工作?
Alias 是一个 shell 功能,nice
是一个外部程序:
$ type nice
nice is hashed (/usr/bin/nice)
它nice
是运行作为参数传递的命令的程序,调用 C 函数execve
,因此它的所有参数都需要在调用之前进行评估。
因此,最好不要使用别名,只需将所需的整个命令放在那里,但如果你真的想要,你可以尝试这样的事情:
$ nice -10 `alias list | sed "s/^\(alias \)\?[^=]\+='//; s/'$//;"`
alias list
以格式alias list='ls'
(或者list='ls'
,如果是/bin/sh
)打印别名定义,所以我在那里做了一些 sed 替换,只得到它扩展的命令。
如果你确定只使用bash
你可以使用${BASH_ALIASES[list]}
,如评论中指出的那样:
$ nice -10 ${BASH_ALIASES[list]}
虽然可能不像nice -10 $UserVar1;
or那样令人兴奋nice -10 ${BASH_ALIASES[list]}
,但您可能也有nice -10 list
您所要求的,尽管通过包装脚本而不是别名:
# one-time setup
mkdir -p ~/.local/aliases
echo 'PATH=$HOME/.local/aliases:$PATH' >> ~/.bashrc
# open new terminal window, or
source ~/.bashrc
# create the wrapper. $@ to passthrough args.
echo 'ls $@' > ~/.local/aliases/list
chmod +x ~/.local/aliases/list
nice -10 list # works :)
nice -10 list --color=always -lathr # args passthrough also works :)
对于 Zsh BASH_ALIASES 将不起作用。所以你可以这样使用它:
nice -10 `list`
这是一个坏主意。您正在定义命令别名,但甚至没有将其用作别名扩展。这里的编码实践不佳。这就是你想要的。
declare -x UserVar1='ls';
nice -10 $UserVar1;
如果您以后不会在代码中更改 UserVar1 的定义。您可以证明使用变量而不是实际命令名称的理由为零。
你正走向灾难。简单明了。使用变量或命令名称本身会更安全、更高效且更易于阅读。