Я часто хочу иметь какой-то псевдоним / замену «битов» команды.

Например: я хочу, чтобы 'bkg' было переведено как "2> /dev /null> /dev /null &", чтобы я мог запускать приложения в фоновом режиме и не выводить спам на консоль, например:

nautilus . bgk
>>>
nautilus . 2> /dev/null > /dev/null &

Самая близкая вещь, которую я получил к работе, состоит в следующем:

1) Создать псевдоним:

alias bkg="&> /dev/null > /dev/null &"

2) Перед вводом команды введите псевдоним и сначала раскройте его с помощью ctrl+alt+e, затем вернитесь и введите команду.

bkg       #press ctrl+alt+e
&> /dev/null > /dev/null &    #has expanded. Now go back and type cmd:
nautilus &> /dev/null > /dev/null &

Однако это несколько громоздко.

[править] ZSH, похоже, имеет глобальные псевдонимы. Это близко к тому, что мне нужно. Но из показаний видно, что zsh не полностью совместим со скриптами bash. Похоже, что переключение на zsh только для глобального алининга, но для взлома скриптов bash может не стоить этих усилий. Как таковой, ищу bash-native решение.

[редактировать]
В соответствии с предложением @ egmont, мне нужно определить псевдоним:

alias quiet="&> /dev/null "

Тогда я могу использовать это как:

quiet nautilus . &

Тем не менее, две проблемы: «&» должен быть в конце, и предсказание табуляции не работает после того, как «тихий» напечатан.

2 ответа2

1

ZSH предоставит вам всю необходимую вам веревку с глобальными псевдонимами (а также &>/dev/null как более короткий способ написать перенаправление).

% alias -g bgk='&>/dev/null &'
% sleep 20 bgk
[1] 44612
% 

Тем не менее, я настоятельно рекомендую не использовать глобальные псевдонимы, так как они являются чем-то вроде леггинсов.

1

Малоизвестная особенность оболочек заключается в том, что перенаправление не обязательно должно стоять в конце строки, оно может находиться где угодно между аргументами или даже в самом начале. Другими словами, эти три эквивалентны:

nautilus . >/dev/null
nautilus >/dev/null .
>/dev/null nautilus .

Таким образом, вы можете определить alias blk='>/dev/null' который будет работать в начале командной строки, или определить alias naublk='nautlius >/dev/null' а затем выполнить naublk . , и так далее.

Интересно, что в bash-4.3 кажется, что вы можете иметь несколько псевдонимов для перенаправлений в начале, а затем один для команды. Например:

alias dn1='> /dev/null'
alias dn2='2> /dev/null'
alias nau=nautilus
dn1 dn2 nau .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .