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

时间:2012-05-11 02:13:19

标签: bash

如何将“nice”命令与别名一起使用?

举个例子:

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

我怎样才能使最后一行有效?

4 个答案:

答案 0 :(得分: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]}

答案 1 :(得分:1)

虽然可能不像nice -10 $UserVar1;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 :)

答案 2 :(得分:0)

这是一个坏主意。您正在定义命令别名,但甚至不将其用作别名扩展。编码练习不好。这就是你想要的。

declare -x UserVar1='ls';

nice -10 $UserVar1;

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

你正走向灾难。 简单明了。使用变量或命令名本身,它更安全,更有效,更容易阅读。

答案 3 :(得分:0)

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

nice -10 `list`