Как выполнить исполняемый файл из другого каталога без CD или изменения ПУТИ?

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

Скажем, у меня есть скомпилированный .c файл, приводящий к исполняемому файлу ex который расположен как /mnt/f/C_F/ex. Я могу очень хорошо выполнить его из /mnt/f/C_F ./ex но что, если я хочу сделать это от /mnt/f скажите (или любой каталог в этом отношении). Я не хочу добавлять /mnt/f/C_F/ СОЕДИНЯТЬ КАНАЛОМ для этого.

Я не мог найти решение, и я предполагаю, что не возможно сделать так. Подтвердите это.

0
задан 6 November 2019 в 15:15

3 ответа

Используйте полный путь для того файла.

/mnt/f/C_F/ex

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

1
ответ дан 22 December 2019 в 00:05

Можно всегда использовать относительный или полный путь для исполняемого файла

Когда Вы находитесь в /mnt/f, можно работать:

C_F/ex
# or
/mnt/f/C_F/ex
2
ответ дан 22 December 2019 в 00:05

Любой path1 к исполняемому файлу, который содержит по крайней мере один / работы. Присутствие a / символ на название команды говорит оболочке, что Вы просите, чтобы это петляло и что Вы указываете определенное место, где тот файл должен быть найден. Это - часть синтаксиса, который ожидает оболочка; в большинстве других контекстов приемлемо для (относительных) путей содержать нет / символ.

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

  • Полные пути - как /mnt/f/C_F/ex- запустите с /.

  • Относительные пути в файл в другом каталоге-C_F/ex когда Вы находитесь в /mnt/f каталог - всегда содержит a /, даже при том, что это не вначале. Относительный путь без a / просто имя файла, определяя файл в текущем каталоге. (Обратное неверно все же. Относительный путь может содержать a / и все же обратитесь к файлу в текущем каталоге; посмотрите ниже.)

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

Для исполняемого файла, который находится в текущем каталоге, обычно не работает самый короткий относительный путь, потому что он не содержит a /. Таким образом это - более сложный случай, даже при том, что это более знакомо. Когда Вы находитесь в каталоге где исполняемый файл ex расположен, Вы не можете просто работать ex, даже при том, что ex совершенно хороший относительный путь к тому исполняемому файлу.

Причина это не работает, состоит в том, что название команды, которое не содержит a / не рассматривается как относительный путь или любой путь. Вместо этого это рассматривают как имя файла и разыскивают в каталогах, перечисленных в $PATH.2

Поэтому Вы используете ./ex когда Вы находитесь в том же каталоге как ex. Каждый каталог содержит a . запись, которая обращается к самому каталогу. Это позволяет писать относительный путь, который определяет тот же файл как ex но имеет a / в нем и таким образом применимо как название команды, которое оболочка рассматривает как путь.

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


1 В этом ответе, я использую "путь" для значения "пути". Это - наиболее популярный способ использования "пути", но не единственный. "Путь", поскольку я использую термин здесь, не должен быть перепутан с исполняемым путем поиска, который является набором каталогов, пути которых перечислены, разделены : символы, в $PATH переменная среды.

2 Названия команды, которые не содержат a / может также быть разрешен как невнешние команды, такие как оболочка builtins и функции оболочки.

0
ответ дан 22 December 2019 в 00:05

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

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