2012-05-11 3 views
4

Как я могу использовать команду «nice» с псевдонимом?Использование команды «nice» с псевдонимом

В качестве примера:

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

Как я мог сделать, что последняя строка работы?

+0

Как насчет того, чтобы просто не ОБЕСПЕЧИТЬ код. альтернативно, вы можете установить Auto Nice Daemon (который я использую), но вам придется искать и компилировать исходный код. Auto nice позволяет вам управлять приятным для пользователей, групп, processess и целый список других спецификаций, таких как имя процесса. –

+0

Эй, ты не должен был удалять это ... Мне понравилось объяснение единственного хорошего использования для псевдонима! :) – elias

+0

Не уверен, что вы подразумеваете под OBFUSCATING в этом контексте. Фактический псевдоним немного сложнее, определенный в файле профиля. Не то, что я хочу начать повторять по разным сценариям. – mahemoff

ответ

3

Алиас является особенностью оболочки, и 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]} 
+6

'$ {BASH_ALIASES [list]}' может быть проще, чем использовать 'sed' – FatalError

+0

Я до сих пор не вижу, как это отличается от создания переменной для экспорта. Конечным результатом является расширение переменной здесь. Я уже освещал это. И было бы безопаснее иметь частный var, такой как MYLISTCMD__XXX. Но хорошо. Ты получаешь то, за что платишь. –

+0

@downvoter, чтобы прокомментировать? – elias

0

Это плохая идея. Вы определяете псевдоним команды, но даже не используете его как расширение псевдонима. Плохая практика кодирования здесь. Это то, что вы хотите.

declare -x UserVar1='ls'; 

nice -10 $UserVar1; 

И если вы не измените определение UserVar1 позже в своем коде. Есть нулевые причины, по которым вы можете оправдать использование переменной вместо фактического имени команды.

Вы направляетесь в катастрофу. Обычный и простой. Используйте переменную или имя самой команды, она намного безопаснее и немного более эффективной и удобной для чтения.

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. [email protected] to passthrough args. 
echo 'ls [email protected]' > ~/.local/aliases/list 
chmod +x ~/.local/aliases/list 

nice -10 list # works :) 
nice -10 list --color=always -lathr # args passthrough also works :) 
0

Для ЗШ BASH_ALIASES не будет работать. Таким образом, вы можете использовать его следующим образом:

nice -10 `list` 
Смежные вопросы