В чем разница между "./" и "open" в терминале и как можно запустить исполняемый файл Unix из XCode? - PullRequest
3 голосов
/ 14 января 2011

Я новичок во всем этом, и я хотел бы извинить меня за мое невежество ..

У меня есть исполняемый файл Unix. Я запускаю терминал с помощью команды: open programname --args аргумент, и он отвечает, что не может найти файл ресурса (это аргумент, который я передал).

Я попытался написать: ./programname аргумент, и это работает.

Во-первых, я хотел бы знать разницу между этими двумя методами и почему первый не работает, а второй работает.

Проблема, с которой я столкнулся сейчас, заключается в том, что я не могу сделать это в XCode. Когда исполняемый файл запущен, он говорит, что не может найти файл ресурсов. Я передал аргумент в исполняемом файле cmd + i исполняемому файлу и добавил файл ресурса в качестве аргумента.

Спасибо за ваш потенциальный ответ.

Ответы [ 2 ]

2 голосов
/ 14 января 2011

open является точным эквивалентом двойного щелчка по объекту в Finder. Поэтому, если вы используете его в исполняемом файле UNIX, то исполняемый файл запустится, но текущий рабочий каталог не будет находиться там, где находится исполняемый файл, и не обязательно будет чем-то полезным. Однако вы также можете использовать его для открытия файла .doc или любого другого типа, открытия каталога в Finder, открытия URL-адреса в Finder и т. Д.

Запуск исполняемого файла с ./name - это обычный UNIX-способ запуска. Текущий рабочий каталог будет там, где вы находитесь, когда вы его набираете. Таким образом, это будет тот же каталог, в котором находится исполняемый файл (если только вы не запускаете его из другого места на диске, например, перейдя в каталог и используя ../name для запуска исполняемого файла).

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

Если вы находитесь в C или что-то, что может вызвать C (например, C ++, Objective-C и т. Д.), Тогда NSGetExecutablePath (игнорируйте желание Google поставить подчеркивание перед ним, см., Например, this site ) вполне вероятно, что вы хотите. Если вы находитесь в Objective-C, то NSString имеет несколько методов для автоматического добавления путей.

1 голос
/ 14 января 2011

«open» - это команда, которая работает точно так же, как если бы вы перешли к определенному приложению через Finder, а затем дважды щелкнули по нему.

. / - это способ запуска определенного файла, помеченного как исполняемый черезchmod.

Например, вы можете запустить приложение Mac OS X из командной строки, введя «open /Applications/MyApp.app/».Но это не сработает, если вы это сделаете ./MyApp.app/ (при условии, что вы находитесь в каталоге / Applications).

Если вы введете «man open» в свой терминал, вы можете прочитать более подробную информацию там..

...