2015-04-07 4 views
-1

Когда начинает работать, я должен выполнить несколько команд:Linux основы - автоматизировать выполнение скрипта

source work/tools 
cd work/tool 
source tool 
setup_tool 

Конечно же, делать это несколько раз в день действительно annonying, поэтому я попытался сделать Баш сценарий tool где я эти команды и поместить его в /user/bin, чтобы запустить его с помощью команды

tool 

Однако, есть проблема. Когда я запускаю скрипт, а затем пытаюсь работать, набрав некоторые из команд на основе инструментов, это не сработает. Я понял, что это прекрасно, поскольку, если я создаю скрипт и запускаю его, скрипт, похоже, запускается в том же окне терминала, но то, что он на самом деле делает, это то, что он ведет себя так, как будто он создал «скрытое окно» «для его выполнения и после завершения скрипта« скрытое окно »также завершается. Поэтому я спрашиваю - есть ли способ автоматизировать команду source?

Я попытался использовать команду xterm -hold -e, но он запускает запрограммированный сценарий в новом окне. Очевидно, я не хочу этого. Как я могу запустить его в текущем окне?

+1

Не нужно ничего касаться в '/ usr/bin'. Лучше всего просто определить функцию в вашем ~/.bashrc, например: 'mystart() {source work/tools; cd work/tool; инструмент источника; setup_tool} '. Тогда единственное, что вам нужно сделать, это ввести 'mystart' после поиска этого файла. – fedorqui

+0

Исправьте свой скрипт инструмента! './path/to/tool' - так просто :) – SuperSaiyan

ответ

2

Он не создает новое скрытое окно и не создает терминал. Случается, что если вы запускаете скрипт, обычно он запускается в новом режиме оболочки. Предполагается, что сценарий, который вы используете, модифицирует среду оболочки, но если вы запускаете скрипт в новом процессе оболочки, то среда этого процесса оболочки изменяется, а не среда оболочки.

Сценарии, которые должны изменить текущие среды оболочки, обычно должны запускаться с помощью команды source. Что вам нужно сделать, так это запустить скрипт в текущей оболочке. Поэтому вы должны сделать source /path/to/tool.

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

alias tool="source /path/to/tool" 
+0

Спасибо, очень ценится. Теперь это работает. Еще раз спасибо. – user74200

3

Не помещайте файлы в /usr/bin. Как правило, вы не хотите вмешиваться в подобные места распространения. Вы можете использовать /usr/local/bin, если вам нужно общесистемное местоположение, или вы можете создать каталог в своем домашнем каталоге, чтобы хранить такие вещи, которые используются для вашего собственного использования (и добавьте это к $PATH).

Что вы заметили, так это то, что при запуске как сценарий самостоятельно (tool, /path/to/tool и т. Д.), Что скрипт работает в своем собственном сеансе оболочки (ничего общего с терминальными окнами как таковой), и вы не 't хочу, чтобы (поскольку изменения, которые делает сценарий, не сохраняются в текущем сеансе оболочки).

То, что вы хотите сделать, это «источник»/запустить скрипт в текущем сеансе. Что вы уже делаете с этим набором команд, которые вы указали (source work/tools делает именно это).

Таким образом, вместо использования tool или /path/to/tool вместо этого использовать source /path/to/tool или . /path/to/tool.

Как правильно указывается Fedorqui, вам даже не нужен сценарий для этого, поскольку вы можете просто сделать для него функцию оболочки (в ваших обычных файлах запуска оболочки .bashrc и т. Д.), А затем просто запустите эту функцию, когда вам нужно так настроить.

Будьте осторожны, чтобы использовать полные пути для вещей, когда вы делаете это, хотя, поскольку вы, по-видимому, хотите, чтобы это работало независимо от того, в какой папке вы оказались, когда вы ее запускаете.

+0

Ну, это только копирование, поэтому мне все равно, я уверен, что я не возился ни с чем в/usr/bin, просто добавляя. Я убедился, что просто добавляю и не переписываю, поэтому считаю, что все в порядке. – user74200

+0

Пока какой-либо пакет не захочет добавить файл с этим именем, обязательно. Или вы забываете, что вы разместили свой файл и убрали '/ usr', чтобы переустановить и потерять файл. и т. д. Это просто не игровая площадка пользователя/администратора. Есть места для этого. –

Смежные вопросы