如何将“nice”命令与别名一起使用?
举个例子:
alias list=ls
list # works
nice -10 list # doesn't work
我怎样才能使最后一行有效?
答案 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`