Как запускать программы из другого каталога в Unix

0

Я знаю, что это очень простой вопрос, и что было задано много похожих (но более сложных!) Вопросов. Поэтому я хотел задать это очень плоско. Извините, если это аннулирует правила поведения на этом сайте! Я очень новичок в использовании Unix.

У меня есть программа, которая преобразует файл .evt в .rq1, который используется для анализа данных. Команда для этого проста, например: Convert data.evt (это выводит data.rq1).

Скажем, эта программа находится в каталоге / A, и у меня есть файл данных, который я хочу преобразовать в каталог / B. Как мне выполнить эту программу, не перемещая программу конвертации в каталог B?

Der Hochstapler
источник
любая проблема с переходом в каталог /B и выполнение /A/program ?
Oleg Mikheev

Ответы:

4

Это очень просто:

./A/Convert B/some_file  

Это означает, что перейдите в каталог A и запустите программу с заданным вами параметром.

Ilmirus
источник
Вау, большое спасибо за быстрый ответ, который на самом деле довольно прост - все остальное, что я пробовал, казалось гораздо более сложным (и более «надежным»), чем то, что мне было нужно.
Обратите внимание, что «точка» означает текущий каталог, поэтому вышеприведенный не будет работать, если A находится в любом каталоге, в котором вы находитесь.
LawrenceC
3

В файловой системе UNIX все ваши встроенные команды являются двоичными файлами (программами), написанными для выполнения определенных задач. ls команда делает список каталогов, mv команда перемещает или переименовывает файлы и т. д.

Все эти двоичные файлы хранятся в вашем /usr/bin каталог. И путь к этому каталогу хранится в переменной окружения PATH.

Если у вас есть много скриптов, которые выполняют определенные задачи, я бы порекомендовал их перемещать в одну папку. скажем, например, /yourname/scripts и затем установите этот путь в вашей переменной PATH.

Переменная PATH может быть установлена ​​в вашем файле .bashrc или .bash_profile, который загружается всякий раз, когда вы запускаете терминальную сессию. Вы можете просмотреть настройки переменной PATH, выполнив echo в теме.

[jaypal~]$ echo $PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin:/usr/local/mysql/bin:/Developer/usr/bin:/usr/local/ActivePerl-5.12/bin:/Library/Ruby/Site/1.8/rubygems:/Library/Ruby/Gems/1.8/gems/wkpdf-0.5.3-universal-darwin/bin:/Library/Ruby/Gems/1.8/gems/wkpdf-0.5.3-universal-darwin/lib

В вашем файле .profile просто добавьте :/yourname/scripts папка и делать . .profile на вашей командной строке. Это заставит ваш текущий сеанс загрузить файл профиля без необходимости выходить и снова входить в систему.

После загрузки файла .profile вы можете запустить свой скрипт из любой точки мира, просто набрав scriptname варианты или другие аргументы по мере необходимости.

это руководство будет полезно для вас.

jaypal singh
источник
никто не должен Когда-либо добавить каталог в PATH, чтобы можно было запустить из него одну программу, ln -s это лучшее решение
Oleg Mikheev
В чем может быть потенциальная проблема? Это не только для запуска одной программы. Все созданные пользователем сценарии можно поместить в одну такую ​​папку и вызывать из любого места.
jaypal singh
Если это не только для запуска одной программы, то вы помещаете ее в ~ / Бен - он автоматически добавляется в PATH с помощью bash. Это стандарт подход в отличие от вашего / ВашеИмя / скрипты
Oleg Mikheev
Да, вы тоже можете это сделать. Мне удобнее иметь отдельную папку, содержащую скрипты, которые я пишу, отдельно от бинарных файлов, которые входят в комплект поставки. Я до сих пор не вижу потенциальной ловушки при добавлении папки в переменную PATH.
jaypal singh
с вашим дистрибутивом ничего не приходит ~ / Бен , это исключительно для ваш собственные сценарии
Oleg Mikheev
1

Одно соглашение, используемое большинством опытных пользователей Unix (не предоставляется системой), заключается в создании локального каталога bin - внутри домашнего каталога пользователя - в качестве хранилища для пользовательских сценариев и программ. (взято из Вот )

Поместите свою программу в ~/bin каталог (который является сокращением для /home/yourname/bin ) и вы сможете запустить вашу программу из любого места, потому что когда ~/bin существует Баш добавляет его к PATH по умолчанию (по крайней мере, в Ubuntu). Вам нужно будет создать этот каталог, если он не существует.

Если вы хотите стать более продвинутым пользователем Linux - используйте ln -s связать вашу программу с ее местоположением ~/bin

Oleg Mikheev
источник
0
/path/to/A/Convert /path/to/B/data.evt

... и ваш выходной файл должен оказаться в вашем текущем каталоге (при условии, что у вас есть права на запись).

Кроме того, какой вариант Unix вы используете?

rfmodulator
источник
0

Запустите его просто так:

/A/Convert /B/data.evt

Помните, чтобы не вести / A с . как , означает текущий каталог. Если, конечно, путь, который вы указываете, относится к текущему каталогу.

Cody
источник