Как я могу использовать команду «nice» с псевдонимом?Использование команды «nice» с псевдонимом
В качестве примера:
alias list=ls
list # works
nice -10 list # doesn't work
Как я мог сделать, что последняя строка работы?
Как я могу использовать команду «nice» с псевдонимом?Использование команды «nice» с псевдонимом
В качестве примера:
alias list=ls
list # works
nice -10 list # doesn't work
Как я мог сделать, что последняя строка работы?
Алиас является особенностью оболочки, и 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]}
'$ {BASH_ALIASES [list]}' может быть проще, чем использовать 'sed' – FatalError
Я до сих пор не вижу, как это отличается от создания переменной для экспорта. Конечным результатом является расширение переменной здесь. Я уже освещал это. И было бы безопаснее иметь частный var, такой как MYLISTCMD__XXX. Но хорошо. Ты получаешь то, за что платишь. –
@downvoter, чтобы прокомментировать? – elias
Это плохая идея. Вы определяете псевдоним команды, но даже не используете его как расширение псевдонима. Плохая практика кодирования здесь. Это то, что вы хотите.
declare -x UserVar1='ls';
nice -10 $UserVar1;
И если вы не измените определение UserVar1 позже в своем коде. Есть нулевые причины, по которым вы можете оправдать использование переменной вместо фактического имени команды.
Вы направляетесь в катастрофу. Обычный и простой. Используйте переменную или имя самой команды, она намного безопаснее и немного более эффективной и удобной для чтения.
Хотя, возможно, не столь экзотически интересно, как 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 :)
Для ЗШ BASH_ALIASES не будет работать. Таким образом, вы можете использовать его следующим образом:
nice -10 `list`
Как насчет того, чтобы просто не ОБЕСПЕЧИТЬ код. альтернативно, вы можете установить Auto Nice Daemon (который я использую), но вам придется искать и компилировать исходный код. Auto nice позволяет вам управлять приятным для пользователей, групп, processess и целый список других спецификаций, таких как имя процесса. –
Эй, ты не должен был удалять это ... Мне понравилось объяснение единственного хорошего использования для псевдонима! :) – elias
Не уверен, что вы подразумеваете под OBFUSCATING в этом контексте. Фактический псевдоним немного сложнее, определенный в файле профиля. Не то, что я хочу начать повторять по разным сценариям. – mahemoff