Я задал тот же вопрос некоторое время назад на AskUbuntu, когда я переходил от Gvim до Консольного Vim.
Я получил один ответ, но он включил переключение настроек терминала гнома и этих настроек, примененных через терминалы. Таким образом для курсора терминала гнома было возможно застрять в неправильном состоянии время от времени.
Я все еще интересуюсь тем, получаете ли Вы удовлетворительное решение, но со временем я корректировался к отсутствию информации о состоянии режима в курсоре. Возможно, я просто нажимаю Escape чаще (например, esc
для обеспечения я нахожусь в командном режиме; esc i
для обеспечения я нахожусь в режиме вставки); возможно, я смотрю на состояние, отображенное внизу экрана; возможно, я только что усвоил режим.
У Вас не может быть своего пирога есть его также. Эти две вещи, происходящие здесь, выполняют сценарий в новой оболочке и импортируют строки сценария, который будет выполнен в текущей оболочке. При помощи точечного оператора (который является псевдонимом для source
команда), Вы на самом деле выполняете код в своей текущей оболочке. Если Ваш код принимает решение cd
, то, когда это сделает Вас, оставят в новом каталоге.
Если, с другой стороны, Вы хотите выполнить программу (или сценарий, не имеет значения), что программа будет запущена как подпроцесс. В случае сценариев оболочки новая оболочка будет открыта и код, выполненный в нем.Любой cd
принятые меры изменят текущий рабочий каталог для той оболочки, эффективной, чтобы любые команды следовали. Когда задание закончится, оболочка выйдет, оставляя Вас в Вашем оригинале (и неизмененный) оболочка.
Если это - что-то, что Вы используете много, и Вы хотите, чтобы его эффекты были оставлены позади в Вашей текущей оболочке, возможно, Вы могли записать свой "сценарий" как функцию оболочки вместо этого и сохранить его в Вашем ~/.profile или другом файле дистанционного управления оболочки.
function cpj() {
# code here
cd /path/$1
emacs file_name
}
У меня есть похожий сценарий, написанный для моего личного использования. Есть очень простой трюк, чтобы добиться изменения рабочей директории внутри скрипта. Сначала просто напишите свой скрипт, например:
#!/bin/bash
case $1 in
project1) cd /home/me/work/customer1/project1
;;
project2) cd /home/me/work/customer2/project1
;;
project3) cd /home/me/work/customer3/project2
;;
project4) cd /home/me/work/customer4/project5
;;
*) echo "Usage: cdto cd_profile_name"
;;
esac
Теперь предположим, что скрипт называется 'cdto'. Чтобы он заработал, вы должны исходить из него в текущей оболочке, что может быть достигнуто командой 'source' или '.' (обе команды одинаковы). В ex.:
. cdto project1
Теперь, чтобы сделать его более удобным:
Скопируйте скрипт 'cdto' в каталог 'bin' вашей учетной записи (в ex. /home/johnsmith/bin - создайте его, если он не существует). Проверьте переменную PATH, чтобы убедиться, что каталог 'bin' включен:
echo $PATH
Если нет, отредактируйте файл .profile и добавьте:
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Добавьте псевдоним в .bashrc или .bash_aliases файл:
псевдоним cdto='. cdto'
И все готово. После следующего входа в систему или при открытии нового терминала вы можете просто использовать in.ex.:
cdto project1
Enjoy :-)
Sebastian Piech
.Un simple truco para hacer esto:
pushd $PROJDIR && bash
Ahora el directorio de trabajo es $PROJECT.