изменение текущего рабочего dir со сценарием

Я задал тот же вопрос некоторое время назад на AskUbuntu, когда я переходил от Gvim до Консольного Vim.

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

Я все еще интересуюсь тем, получаете ли Вы удовлетворительное решение, но со временем я корректировался к отсутствию информации о состоянии режима в курсоре. Возможно, я просто нажимаю Escape чаще (например, esc для обеспечения я нахожусь в командном режиме; esc i для обеспечения я нахожусь в режиме вставки); возможно, я смотрю на состояние, отображенное внизу экрана; возможно, я только что усвоил режим.

8
13.04.2017, 15:36
3 ответа

У Вас не может быть своего пирога есть его также. Эти две вещи, происходящие здесь, выполняют сценарий в новой оболочке и импортируют строки сценария, который будет выполнен в текущей оболочке. При помощи точечного оператора (который является псевдонимом для source команда), Вы на самом деле выполняете код в своей текущей оболочке. Если Ваш код принимает решение cd, то, когда это сделает Вас, оставят в новом каталоге.

Если, с другой стороны, Вы хотите выполнить программу (или сценарий, не имеет значения), что программа будет запущена как подпроцесс. В случае сценариев оболочки новая оболочка будет открыта и код, выполненный в нем.Любой cd принятые меры изменят текущий рабочий каталог для той оболочки, эффективной, чтобы любые команды следовали. Когда задание закончится, оболочка выйдет, оставляя Вас в Вашем оригинале (и неизмененный) оболочка.

Если это - что-то, что Вы используете много, и Вы хотите, чтобы его эффекты были оставлены позади в Вашей текущей оболочке, возможно, Вы могли записать свой "сценарий" как функцию оболочки вместо этого и сохранить его в Вашем ~/.profile или другом файле дистанционного управления оболочки.

function cpj() {
    # code here
    cd /path/$1
    emacs file_name
}
11
27.01.2020, 20:11
  • 1
    Caleb, спасибо за Ваш вход. Мне нравится Ваша игра слов. Ваш первый абзац вновь заявляет о том, что я сказал в своем вопросе превосходно. Ваш второй абзац вновь заявляет о том, что было сказано в вопросе, что я процитировал вполне хорошо. Ваш третий абзац точно и точно что я искал! Спасибо чувак. –  bev 10.06.2011, 04:09

У меня есть похожий сценарий, написанный для моего личного использования. Есть очень простой трюк, чтобы добиться изменения рабочей директории внутри скрипта. Сначала просто напишите свой скрипт, например:

#!/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

Теперь, чтобы сделать его более удобным:

  1. Скопируйте скрипт 'cdto' в каталог 'bin' вашей учетной записи (в ex. /home/johnsmith/bin - создайте его, если он не существует). Проверьте переменную PATH, чтобы убедиться, что каталог 'bin' включен:

    echo $PATH

Если нет, отредактируйте файл .profile и добавьте:

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
  1. Добавьте псевдоним в .bashrc или .bash_aliases файл:

    псевдоним cdto='. cdto'

И все готово. После следующего входа в систему или при открытии нового терминала вы можете просто использовать in.ex.:

cdto project1

Enjoy :-)

Sebastian Piech

.
2
27.01.2020, 20:11

Un simple truco para hacer esto:

pushd $PROJDIR && bash

Ahora el directorio de trabajo es $PROJECT.

0
27.01.2020, 20:11

Теги

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