4

如何使用带有别名的“nice”命令?

举个例子:

alias list=ls
list # works
nice -10 list # doesn't work

我怎样才能使最后一行工作?

4

4 回答 4

3

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]}
于 2012-05-11T02:28:05.557 回答
1

虽然可能不像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 :)
于 2015-09-04T23:51:25.533 回答
1

对于 Zsh BASH_ALIASES 将不起作用。所以你可以这样使用它:

nice -10 `list`
于 2016-06-21T13:02:29.420 回答
0

这是一个坏主意。您正在定义命令别名,但甚至没有将其用作别名扩展。这里的编码实践不佳。这就是你想要的。

declare -x UserVar1='ls';

nice -10 $UserVar1;

如果您以后不会在代码中更改 UserVar1 的定义。您可以证明使用变量而不是实际命令名称的理由为零。

你正走向灾难。简单明了。使用变量或命令名称本身会更安全、更高效且更易于阅读。

于 2012-05-11T04:27:45.810 回答