На большинстве наших серверов завершение заполнения имен служб после ввода команды службы больше не работает, как root. Он отлично работает как не-root. Это на Ubuntu 12.04.
Демонстрация:
Завершение вкладки работает как обычный пользователь zachary, который нажал вкладку, чтобы отобразить доработки на первом изображении: [ ! d3]
Но как пользователь root, он не перечисляет службы как завершение (только файлы):
[!d7 ]
Любая помощь будет принята с благодарностью.
Хорошо, поэтому я понял это.
Все, что работает:
sudo -i sudo su -Вещи, t:
sudo -i sudo su sudo su -Так что мне кажется, что в первом случае, вы на самом деле создаете новую оболочку для входа, поэтому bashrc, profile и т. д. загружаются правильно, либо из ~, либо из / etc / skel. В последнем случае вы просто выполняете bash как root и не загружаете все эти критические функции в оболочку для автозаполнения и т. Д.
Предостережение. Мое объяснение может быть на 100% неправильным. Но верхняя группа работает.
Вы можете выполнить следующие шаги, чтобы получить завершение для sudo в bash:
Откройте ваш .bashrc. Вставьте следующие строки и сохраните файл if [ "$PS1" ]; then complete -cf sudo fi Команда complete создает списки завершений для имен команд (-c) и имя файла (-f) для sudo. Откройте новую вкладку bash и type sudo -s или любую другую команду, которую вы хотите использовать.У меня была такая же проблема с root, а не с автозаполнением. Я безуспешно пробовал пару других способов, включая возиться с .bashrc и установить пару пакетов. Что, наконец, сработало для меня, было так же просто, как просто запустить bash. Итак, вы делаете свои списки sudo su и tab только в /root)
root@xxxxxxxx:~# service<tab>
root@xxxxxxxx:~# service .<tab><tab>
./ .aptitude/ .bashrc .viminfo
../ .bash_history .profile
echo $SHELL отвечает /bin/bash, поэтому я запускаю bash, но он не работает. Теперь я запускаю bash, и моя оболочка выглядит одинаково.
root@xxxxxxxx:~# bash
root@xxxxxxxx:~# service <tab><tab>
acpid plymouth-upstart-bridge
apache2 portmap
apparmor portmap-wait
Теперь он работает. Просто имейте в виду, что вам придется удвоить выход, чтобы выйти из bash, который вы только что запустили, а затем выйти из сессии sudo su, чтобы вы не оставили открытый корневой терминал.
root@xxxxxxxx:~# uname -mrs
Linux 3.8.0-33-generic x86_64
root@xxxxxxxx:~# lsb_release -d
Description: Ubuntu 12.04.3 LTS
У меня была та же проблема. Я попытался сделать это:
Запустить /usr/sbin/visudo как пользователь root. Добавьте эту строку в нее, затем сохраните и завершите работу: Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin Откройте новый сеанс и попробуйте запустить команду сейчасВот и все. ; вы это сделали.