Запустите терминатор в нужном каталоге, а затем выполните необходимую команду

9

Например /home/downloads/, я хочу открыть Terminator в определенном каталоге , а затем выполнить команду.

Первую часть я выполнил с помощью этой «пользовательской команды»: cd /home/downloads; bash теперь терминатор запускается в этом каталоге, но как мне сделать вторую часть?

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

Я нажимаю правую кнопку мыши в терминаторе и выбираю «Параметры», затем «Макеты», затем добавляю текст в раздел «Пользовательские команды».

Все это должно выполняться автоматически после запуска терминатора.

ASQ
источник
Какую команду вы хотите запустить? Просто запустите это. Вы хотите, чтобы это происходило автоматически каждый раз, когда вы открываете терминатор? Пожалуйста, отредактируйте свой вопрос, и я) уточнить, что вы хотите сделать, и б) рассказать нам точно, как вы настроили эту "пользовательскую команду", это было в настройках терминатора?
Тердон
Да, я хочу, чтобы первая и вторая команды запускались автоматически после запуска терминатора, но теперь я знаю только, как выполнить первую команду, и она работает, но не знаю, как запустить вторую команду. Первая команда: «cd» для любого каталога, а вторая должна быть любой, в этом каталоге, или нет. Я редактирую свой вопрос. Извините за мой уродливый язык.
Asq

Ответы:

4

Запустите cd /home/downloads; exec bashкак пользовательскую команду. ( execВстроенный модуль гарантирует, что bashон будет дочерним по отношению к эмулятору терминала; без него он может оказаться внуком.) Вы можете запустить его terminator -e 'cd /home/downloads; exec bash'из командной строки.

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

. ~/.bash_aliases; cd /home/downloads; exec bash

или в командной строке

terminator -x bash -c '. ~/.bash_aliases; cd /home/downloads; exec bash'

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

Жиль "ТАК - перестань быть злым"
источник
3

У меня была такая же проблема для активации виртуальных сред с помощью Terminator .

Хитрость заключается в том, чтобы сделать все с командой только «один»: bash. Воспользовавшись его -iопцией (интерактивной) и используя пользовательский, --rcfileв котором PROMPT_COMMANDустановлено все, что мы хотим выполнить. Результат будет таким:

command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="your commands; go here; unset PROMPT_COMMAND"') -i"

Просто замените your commands; go here;ваши фактические команды. Смотрите этот ответ для объяснения .

Peque
источник
Любая идея, почему указанная мной команда не может быть завершена с помощью Ctrl + C?
Flowkap
2

Просто добавьте другую команду так же, как вы добавили первую. Например, чтобы запустить ls:

cd /home/downloads; ls; bash

Вы можете добавить это в опцию «команда» вашего профиля:

введите описание изображения здесь

Причина, по которой вы не получаете, rakeзаключается в том, что он не находится в пути по умолчанию. Чтобы его использовать, нужно указать путь. Итак, сначала запустите эту команду в вашем терминале:

type rake

Это вернет что-то вроде /foo/bin/rake. Это путь, который вам нужен. Возьмите его и добавьте в пользовательскую команду выше:

cd /home/downloads; /foo/bin/rake; bash

Это не будет работать для псевдонимов. Псевдонимы настраиваются вашей оболочкой и не будут доступны здесь. Обходной путь должен использовать сценарии вместо этого. Итак, если у вас есть такой псевдоним:

alias foo="command1 argument2"

Создайте скрипт, вызовите его foo.shи сохраните в нем /home/youruser/binс таким содержимым:

#!/usr/bin/env bash
command1 argument2

И сделать его исполняемым:

chmod a+x /home/username/bin/foo.sh

Затем в разделе «Пользовательская команда» используйте:

cd /home/downloads; /home/username/bin/foo.sh; bash
Тердон
источник
Да, я знаю, что это и команда "ls" работают, но 1. например, команда "rake" не работает и выводит сообщение об ошибке терминала: "/ bin / bash: rake: команда не найдена" 2. У меня есть некоторые псевдонимы, и для пример "cd / home / downloads; 'псевдоним'; bash" также не работает, терминал показывает ту же ошибку
Asq
@ Хорошо, да, поэтому я попросил вас рассказать нам, какую команду вы хотите выполнить. Пожалуйста, отредактируйте свой вопрос и приведите конкретные примеры. Псевдонимы не сработают, вы можете об этом забыть, но rakeдолжны, если вы используете полный путь /path/to/rake.
Тердон
Я должен отредактировать свой главный вопрос? И что ты имеешь в виду "если вы используете полный путь / путь / к / грабли"? Я перехожу в каталог, где я всегда использую rake, и это работает, но «cd / path / to / rake; rake; bash» не работает
Asq
@ Задавай да, пожалуйста, отредактируй свой оригинальный вопрос. Не cd /path/to/rake; rake; bashделай /path/to/rake; rake; bash.
Terdon
:( Я использую команду rake, когда нахожусь в каталоге / home / 123. Теперь я добавляю в пользовательскую команду это: "/ home / 123; rake; bash", но консоль показывает мне 2 ошибки: 1. / bin / bash: / home / 123: Это каталог 2. / bin / bash: rake: команда не найдена
Asq
1

Если вы щелкнете правой кнопкой мыши на открытом окне Терминатора, вы можете выбрать «Настройки». Выберите «Профиль» и оттуда вкладку «Команда». Существует флажок «Запустить пользовательскую команду вместо моей оболочки».

Я считаю, что это то, что вы ищете.

rcjohnson
источник
1

Просто не используйте ' command =', чтобы изменить каталог. Используйте это для вашей фактической команды!

При редактировании .config/terminator/configпросто укажите

  • ' directory = <dir>' когда вы хотите, чтобы терминал автоматически перешел на один заданный каталог, или
  • ' command = <cmd>; <your_shell>' когда вы хотите выполнить пользовательскую команду, а не просто изменить каталог

Например:

  • Если вы хотите, чтобы терминал запускался <dir>при запуске, укажите «directory» и оставьте «command» пустым:

    [[terminal7]]]
    directory = /home/dan/src/wmc
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
  • Если вы хотите выполнить только пользовательскую команду, укажите только команду:

    [[terminal7]]]
    command = /home/dan/mine/my-custom-command
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
  • Если вы хотите, чтобы оба CD в DIR и выполнить команду:

    [[terminal7]]]
    directory = /home/dan/dl-dir
    command = /home/dan/mine/my-custom-command-to-run-in-dlDIR
    order = 1
    parent = child3
    profile = default
    type = Terminal
    uuid = ebbe5595-06be-43ff-b7ce-4534aa6bb7f8
    
1111161171159459134
источник