Итак, я создал свою собственную команду псевдонима и попытался использовать ее с alias, но мой псевдоним не был распознан при объединении с командой watch.

Поэтому я попытался создать тему, и, к счастью, этот мне помог вне.

Но в чем причина этого?

Я создал псевдоним в моем .bashrc, который отлично работает.

alias gpu='sensors nouveau-pci-0100'
alias cpu='sensors coretemp-isa-0000'

И когда я объединяю watch и gpu следующим образом:

watch GPU

Я получаю это ниже каждые 2 секунды:

sh: 1: gpu: not found

И я решил это относительно упомянутой выше темы следующим образом:

alias = watchh='watch '
watchh gpu

Но почему это происходит? Почему он может использовать мою точно определенную команду псевдонима?

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

7
Dan 10 Янв 2022 в 13:59

2 ответа

Лучший ответ

Это не имеет ничего общего с пользователями.

Псевдонимы раскрываются только в той интерактивной оболочке, для которой они определены, поэтому интерактивная оболочка bash, если вы определили их через ~/.bashrc, или интерактивная оболочка zsh, если вы определили их в ~/.zshrc Например.

Команда watch вызывает команды через не-интерактивную оболочку /bin/sh.

Путем псевдонима watch как alias watchh='watch ' (с пробелом в конце), а затем использования watchh gpu, вы заставляете текущую интерактивную оболочку расширяться gpu до он передается watch.

Обратите внимание, что в zsh псевдонимы могут быть определены как глобальные, что позволяет их раскрывать в любом месте команды, избегая необходимости использовать псевдоним watch с пробелом в конце.

13
Dan 10 Янв 2022 в 14:00
Вы можете назвать псевдоним watch без дополнительных h. Я также делаю это для sudo в моем .bashrc.
 – 
Karl Bielefeldt
11 Янв 2022 в 01:01

Команда watch не находит псевдонимы, а только команды в вашем пути поиска. В качестве альтернативы определите gpu и cpu как сценарии оболочки вместо псевдонимов и поместите их в путь поиска. Тогда ваши команды watch gpu и watch cpu будут работать нормально.

Например, если $HOME/bin является каталогом в вашем пути поиска, создайте файл $HOME/bin/gpu, содержащий строку:

sensors nouveau-pci-0100

Сделайте файл исполняемым:

$ chmod +x $HOME/bin/gpu

И вы готовы к работе!

$ watch gpu

Затем сделайте то же самое для cpu.

3
DanB 9 Янв 2022 в 23:41
Это кажется законным, чувак, но в моем домашнем каталоге нет /bin. если вы имели в виду ~/bin под $HOME/bin
 – 
YoloWex
10 Янв 2022 в 00:59
2
Вам что-то мешает сделать?
 – 
hobbs
10 Янв 2022 в 10:57
@YoloWex: Да, ~ расширяется до $HOME, вашего домашнего каталога. Сценарии .profile по умолчанию в большинстве систем добавят этот каталог в ваш $PATH, если он существует.
 – 
Peter Cordes
10 Янв 2022 в 10:59
Я попытался сделать один и следовал инструкциям, и это РАБОТАЛО. Спасибо
 – 
YoloWex
10 Янв 2022 в 11:23
Вместо этого я бы предложил ~/.local/bin для согласованности с XDG. спецификация базового каталога, но это на самом деле не имеет значения.
 – 
David Z
10 Янв 2022 в 11:41