8

Наша компания использует систему 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 был открыт.

Тем не менее, если я получаю ++ файл cpp в папке, но не использую vim и:!, Все в порядке. По факту, :! сейчас кажется незаконным для vim.

Если я использую оригинальный tcsh, все также в порядке.

Как я могу исправить эту любопытную ошибку?

Спасибо за вашу помощь заранее.

цин

Кстати: я предпочитаю bash tcsh в первую очередь из-за удобства HISTIGNORE и HISTCONTROL, хотя tcsh также имеет настройку Histdup.

Я обнаружил, что следующее немного полезно, но все еще не подходит для моей проблемы.

Как запускать команды Unix из Vim?

3 ответа3

8

Поместите это в ваш скрипт .login:

setenv SHELL /bin/bash
exec bash -l

Первая строка устанавливает переменную среды SHELL. Вторая строка заменяет tcsh на bash , но говорит, что он запускается как оболочка входа в систему (поэтому bash обработает ваш .profile т.д.). Вы можете добавить опцию -i чтобы сделать ее интерактивной; это не должно быть необходимо.

2

Оболочка по умолчанию для любого пользователя хранится в файле /etc /passwd. Пользователь может изменить свою оболочку по умолчанию на любую из оболочек, перечисленных в /etc /shells, введя команду chsh . Обратитесь к справочным страницам chsh(1) и shells(5) для получения дополнительной информации.

Этот ответ является "более правильным", чем подход к замене текущей оболочки после входа в систему, поскольку нет необходимости запускать нежелательную оболочку в первую очередь. Этот подход полезен только тогда, когда администратор пренебрег файлом /etc /shells и забыл добавить в него bash (никогда).

1

Спасибо за вашу большую помощь.

Прежде чем дать окончательное решение, которое я выберу, я должен указать на ошибку в моем первоначальном вопросе. Мой оригинальный .cshrc имеет следующие три строки:

     bash
     source ~/.bashrc
     echo $0

Я пропустил ввод второй строки раньше. Сожалею.

Теперь я попробовал эти два метода, и результаты показаны ниже.

1) .vimrc метод

Если я напишу

     bash
     source ~/.bashrc
     echo $0

в ~/.cshrc

а также

     set shell=/bin/bash

в ~/.vimrc

без файла ~/.login, затем vim и:!С g++ все в порядке, но:GDB a.out имеет некоторую ошибку. Более того, «echo $ 0» выдает "bash", а «echo $ SHELL» выдает «/bin/tcsh». Я не знаю точно разницу между $ 0 и $ SHELL.

2).login метод

Если я напишу

     setenv SHELL /bin/bash
     bash
     source ~/.bashrc
     echo $0

в .login

но ни что-то вроде «set shell = ...» в ~/.vimrc и «bash ...» в ~/.cshrc, все в порядке. Теперь «echo $ 0» возвращает "bash", а «echo $ SHELL» - «/bin/bash».

Bash во второй строке можно заменить на "bash -l". Следует отметить, что если я заменю его на "exec bash" или «exec bash -l», то я не смогу войти в свою учетную запись. (Система автоматически выйдет быстро.) Я тоже не знаю почему.

Я думаю, что второй метод великолепен. Я очень ценю вашу помощь.

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