Конфигурация псевдонимов загружена неправильно

Это моя конфигурация псевдонимов в Ubuntu 16.04.2 LTS

root@Ubuntu:/# cat /etc/.bash_aliases alias i='ifconfig | grep eth -A 1' alias l='ls -lh' root@Ubuntu:/# root@Ubuntu:/# cat /etc/bash.bashrc ### *output truncated* ### if [ -f /etc/.bash_aliases ]; then . /etc/.bash_aliases fi root@Ubuntu:/#

Однако, когда я ее тестирую, работает только alias i='ifconfig | grep eth -A 1'.

root@Ubuntu:/# i eth0 Link encap:Ethernet HWaddr AA:AA:AA:AA:AA:AA inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 root@Ubuntu:/# root@Ubuntu:/# alias i alias i='ifconfig | grep eth -A 1' root@Ubuntu:/#

Другой псевдоним alias l='ls -lh' работает не так, как ожидалось.

root@Ubuntu:/# l bin/ dev/ home/ root@Ubuntu:/#

Результат должен быть таким:

root@Ubuntu:/# ls -lh total 80K drwxr-xr-x 2 root root 4.0K Jul 21 14:37 bin drwxr-xr-x 3 root root 4.0K Jul 21 14:52 boot drwxr-xr-x 15 root root 3.8K Nov 3 12:22 dev root@Ubuntu:/#

Оказывается, l не следует за моим псевдонимом config.

root@Ubuntu:/# alias l alias l='ls -CF' root@Ubuntu:/#

Я думаю, alias l='ls -CF' должен быть настроен где-то в другом месте.

Вопрос в том, как узнать расположение конфигурационного файла alias l='ls -CF'?

1
задан 4 November 2017 в 05:47

2 ответа

Уже существует псевдоним для l в .bashrc (на самом деле он определен в /etc/skel/.bashrc и копируется в домашний каталог пользователя при создании пользователя), и это то, что перезаписывает ваш:

$ grep '^alias l=' /etc/skel/.bashrc alias l='ls -CF' $ grep '^alias l=' ~/.bashrc alias l='ls -CF'

Однако, это не единственная сила, которая здесь играет. Также случается, что bash отправляет файлы в определенном порядке (и в зависимости от режима, в котором он был запущен - интерактивный, неинтерактивный, удаленная оболочка и т. Д.). Общая идея состоит в том, что он идет из файлов, определенных в /etc/, в файлы, определенные в вашем домашнем каталоге, поэтому ваш псевдоним действительно определяется в bash источниках /etc/.bash_aliases, но затем он переопределяется, когда bash источники ваш ~/.bashrc.

Вот демо:

$ # define alias in your file and let it source via /etc/bash.bashrc $ echo "alias sayhi='echo hi'" | sudo tee -a /etc/.bash_aliases [sudo] password for xieerqi: alias sayhi='echo hi' $ echo "[ -f /etc/.bash_aliases ] && source /etc/.bash_aliases" | > sudo tee -a /etc/bash.bashrc [sudo] password for xieerqi: [ -f /etc/.bash_aliases ] && source /etc/.bash_aliases $ # start new interactive shell $ bash $ sayhi hi $ # Works, right ? now define same in ~/.bashrc $ echo "alias sayhi='echo nope'" >> ~/.bashrc $ # and start shell again, let all files source $ bash $ sayhi nope

Обратите внимание, что bash --posix, т.е. когда оболочка находится в режиме posix, ~/.bashrc и /etc/bash.bashrc, очевидно, aren 's sourced; Я тестировал несколько раз, но мой вызов псевдонима не дал никаких результатов в этом режиме.

$ echo "echo 'I am bashrc'" >> ~/.bashrc $ bash I am bashrc $ exit $ bash --posix bash-4.3$
2
ответ дан 18 July 2018 в 03:58

Уже существует псевдоним для l в .bashrc (на самом деле он определен в /etc/skel/.bashrc и копируется в домашний каталог пользователя при создании пользователя), и это то, что перезаписывает ваш:

$ grep '^alias l=' /etc/skel/.bashrc alias l='ls -CF' $ grep '^alias l=' ~/.bashrc alias l='ls -CF'

Однако, это не единственная сила, которая здесь играет. Также случается, что bash отправляет файлы в определенном порядке (и в зависимости от режима, в котором он был запущен - интерактивный, неинтерактивный, удаленная оболочка и т. Д.). Общая идея состоит в том, что он идет из файлов, определенных в /etc/, в файлы, определенные в вашем домашнем каталоге, поэтому ваш псевдоним действительно определяется в bash источниках /etc/.bash_aliases, но затем он переопределяется, когда bash источники ваш ~/.bashrc.

Вот демо:

$ # define alias in your file and let it source via /etc/bash.bashrc $ echo "alias sayhi='echo hi'" | sudo tee -a /etc/.bash_aliases [sudo] password for xieerqi: alias sayhi='echo hi' $ echo "[ -f /etc/.bash_aliases ] && source /etc/.bash_aliases" | > sudo tee -a /etc/bash.bashrc [sudo] password for xieerqi: [ -f /etc/.bash_aliases ] && source /etc/.bash_aliases $ # start new interactive shell $ bash $ sayhi hi $ # Works, right ? now define same in ~/.bashrc $ echo "alias sayhi='echo nope'" >> ~/.bashrc $ # and start shell again, let all files source $ bash $ sayhi nope

Обратите внимание, что bash --posix, т.е. когда оболочка находится в режиме posix, ~/.bashrc и /etc/bash.bashrc, очевидно, aren 's sourced; Я тестировал несколько раз, но мой вызов псевдонима не дал никаких результатов в этом режиме.

$ echo "echo 'I am bashrc'" >> ~/.bashrc $ bash I am bashrc $ exit $ bash --posix bash-4.3$
2
ответ дан 24 July 2018 в 17:58

Другие вопросы по тегам:

Похожие вопросы: