Исполняемый путь выполнения. Зависит ли это от места, из которого вызывается исполняемый файл?

Поскольку я все еще являюсь новым пользователем Linux, я все еще обнаруживаю некоторые поведения, и я не могу сказать, являются ли они "нормальными" или нет. Я искал в Интернете, но так как не могу найти ответ, думаю, пришло время спросить здесь.

Несколько недель назад я установил небольшую игру под названием «Machinarium», и я в нее поиграл ... но несколько дней спустя, когда я захотел продолжить свою игру, я не смог правильно запустить игру. И так как у меня не было времени на поиски, я сдался.

Но вчера, когда я работал над моей программой, у меня было точно такое же поведение. Поэтому я немного искал и обнаружил, что при использовании Nautilus с «представлением списка» я смог запустить программу (то есть: программа действительно находит ресурсы со звуком, изображениями и т. Д.), Когда я был буквально «внутри» исполняемая папка , но не удалось, когда я был в родительской папке и развернул ее до исполняемой папки, чтобы запустить ее.

Чтобы проиллюстрировать поведение здесь два скриншота.

  • Не работает , если здесь дважды щелкнуть исполняемый файл It doesn't works if the executable is started from here
  • Это работает , если исполняемый файл двойной щелчок отсюда It does works if the executable is started from here

Это действительно то же самое «место», но представление Nautilus немного отличается, поскольку текущая папка не совпадает, и кажется, что это имеет значение для программы.

Кроме того, когда я создаю пункты меню через Системные настройки / Главное меню для исполняемого файла, он ведет себя так же, как если исполняемый файл не может найти ресурсы (вот почему я не смог сыграть в Machinarium во второй раз, когда я создал ярлык меню после моей первой игры).

Поэтому я попросил мою программу сгенерировать текстовый файл в корневом каталоге при запуске, и я начал запускать его из разных «родительских» папок, чтобы увидеть, где генерируется текстовый файл. Каждый раз, когда файл генерировался в верхней папке текущего представления Nautilus.

Я ожидал увидеть, что он появляется в той же папке исполняемого файла (ну, не так, как я предполагал, что происходит, но до этого я ожидал увидеть, что он появляется в папке exe).

  • Кто-нибудь может объяснить мне, почему это работает так (я думаю, это нормально)?
  • Как я должен решить эту проблему при создании программ (Должен ли я определить путь к исполняемому файлу в моем C ++ код или я должен организовать файлы ресурсов иначе, чем в Windows?)
2
задан 22 June 2011 в 03:31

2 ответа

Существует деликатный вопрос здесь с ответами для давания Вам общее представление, где установить пользовательские приложения.

Для запуска приложения, исполняемый бит должен быть установлен. Это может также быть сделано от Наутилуса в меню правой кнопки (Свойства-> Полномочия).

Можно затем выполнить любой исполняемый двоичный файл или сценарий путем двойного щелчка в Наутилусе, или путем выполнения следующего в терминале (отметьте ./ команда выполнения):

./path/to/executable/application

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

cd /path/to/executable
./application

Для упрощения этого, можно также создать Средство запуска для запуска приложения (см., например, этот ответ и многие другие),

Это - то, как я сделал это с Machinarium.

Не рекомендуется поместить Вашего собственного пользователя пользовательские файлы в /usr/bin. Этот каталог может быть перезаписан в случае, если Вы обновляете свою систему позже, и это обычно не включается в решения для резервного копирования. Вместо этого создайте новый каталог в своем корневом каталоге: ~/bin. Необходимо повторно войти в систему для этого каталога быть распознанными.

3
ответ дан 2 December 2019 в 02:36

Да. ПУТЬ содержит список путей, где команды ищутся при вводе их. Если Вы хотите выполнить команду не в пути, необходимо дать относительный или полный путь (./file или bin/file например).

Это поведение является, вероятно, ошибкой. Приложение, вероятно, выполняет некоторые файлы в одном из его директоров (bin/ например), но предположение этого выполняется от machinarium корневого каталога (вызовы bin/file принятие dir находится в текущем каталоге), поэтому при выполнении его из другого каталога, файл не будет найден.

Обходное решение должно создать сценарий в ПУТИ, который вводит machinarium каталог и затем выполняет его.

#!/bin/bash
cd /path/to/machinarium
./machinarium-or-whatever

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

1
ответ дан 2 December 2019 в 02:36

Другие вопросы по тегам:

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