Наша компания использует систему Red Hat Linux и выделяет каждому аккаунт в / home. К сожалению, наша система использует tsch, что мне не выгодно. Более того, поскольку у меня нет разрешения суперпользователя, я не могу использовать команду chsh для перехода на bash для себя. Еще хуже, ypchsh также недоступен для меня. Итак, наконец, я добавляю следующие строки в .cshrc:
bash
echo $0
и сконфигурируйте .bashrc соответствующим образом (копирование из оригинального .cshrc и исправление необходимой синтаксической ошибки). Теперь кажущаяся оболочка становится bash (как видно из команды «echo $ 0»).
Теперь возникает проблема:
Когда я использую vim для редактирования файла cpp (например, Hello_World) и использую «:! G ++ -g Hello_World.cpp -o hw.out» в vim для компиляции файла, результат не будет отображаться, и vim завершается с отображается bash (например, когда терминал открыт), но без обычного нажатия клавиши, чтобы вернуться к моей работе в vim. В папке Hello_World.cpp есть файл .Hello_World.cpp.swp, но не hw.out. Когда vim Hello_World.cpp снова, оказывается, что этот файл cpp был открыт.
Тем не менее, если я g ++ файл cpp в папке, но не использую vim и:!, Все в порядке. По факту, :! теперь кажется незаконным для VIM.
Если я использую оригинальный tcsh, все также в порядке.
Как я могу исправить эту любопытную ошибку?
Спасибо за вашу помощь заранее.
цин
Кстати: я предпочитаю bash tcsh в первую очередь из-за удобства HISTIGNORE и HISTCONTROL, хотя tcsh также имеет настройку Histdup.
Я нашел следующее немного полезным, но все еще не удовлетворяющим моей проблеме.
chsh
чтобы изменить вашу регистрационную оболочку.Ответы:
Поместите это в ваш скрипт .login:
Первая строка устанавливает переменную среды SHELL. Вторая линия заменяет
tcsh
сbash
, но говорит ему работать в качестве регистрационной оболочки (такbash
будет обрабатывать ваши и.profile
т.д.). Вы можете добавить-i
опцию, чтобы сделать его интерактивным; это не должно быть необходимо.источник
set shell=/bin/bash
внутрь VIM. Таким образом, вы можете сохранить свою оболочку, но использовать BASH в VIM и избежать!
проблем. Тем не менее, я вижу, что OP все равно предпочитает bash, поэтому ваше решение не только решит проблему с VIM, но и даст OP их предпочтительную оболочку.vim
(илиvi
) так, как ему нравится, в принципе невозможно ограничить доступ к системе, если вы разрешите пользователю доступ кvi
илиvim
. В прошлом люди пытались настроить оболочку на специальную программу, которая выполняет только определенные команды. Однако, если одной из этих команд являетсяvi
илиvim
, то они в любом случае имеют доступ к системе.Оболочка по умолчанию для любого пользователя хранится в файле / etc / passwd. Пользователь может изменить свою оболочку по умолчанию на любую из оболочек, перечисленных в / etc / shells, выполнив
chsh
команду. Обратитесь к справочным страницам chsh (1) и shells (5) для получения дополнительной информации.Этот ответ является «более правильным», чем подход замены текущей оболочки после входа в систему, поскольку нет необходимости запускать нежелательную оболочку в первую очередь. Такой подход полезен только тогда, когда администратор пренебрег файлом / etc / shells и забыл добавить в него bash (никогда).
источник
Спасибо за вашу большую помощь.
Прежде чем дать окончательное решение, которое я выберу, я должен указать на ошибку в моем первоначальном вопросе. Мой оригинальный .cshrc имеет следующие три строки:
Я пропустил ввод второй строки раньше. Сожалею.
Теперь я попробовал эти два метода, и результаты показаны ниже.
1) .vimrc метод
Если я напишу
в ~ / .cshrc
а также
в ~ / .vimrc
без файла ~ / .login, тогда vim и:! g ++ в порядке, но:! gdb a.out имеет некоторую ошибку. Кроме того, «echo $ 0» выдает «bash», а «echo $ SHELL» выдает «/ bin / tcsh». Я не знаю точно разницу между $ 0 и $ SHELL.
2) .login метод
Если я напишу
в .login
но ни что-то вроде "set shell = ..." в ~ / .vimrc и "bash ..." в ~ / .cshrc, все в порядке. Теперь «echo $ 0» возвращает «bash», а «echo $ SHELL» - «/ bin / bash».
Bash во второй строке можно заменить на "bash -l". Следует отметить, что если я заменю его на «exec bash» или «exec bash -l», то я не смогу войти в свою учетную запись. (Система автоматически закрывается быстро.) Я тоже не знаю почему.
Я думаю, что второй метод великолепен. Я очень ценю вашу помощь.
источник