Изменения, подобные тому, что я хочу попросить существовать, но я не мог найти точный вопрос, таким образом, я спрошу это здесь.
Скажем, у меня есть скомпилированный .c
файл, приводящий к исполняемому файлу ex
который расположен как /mnt/f/C_F/ex
. Я могу очень хорошо выполнить его из /mnt/f/C_F
./ex
но что, если я хочу сделать это от /mnt/f
скажите (или любой каталог в этом отношении). Я не хочу добавлять /mnt/f/C_F/
СОЕДИНЯТЬ КАНАЛОМ для этого.
Я не мог найти решение, и я предполагаю, что не возможно сделать так. Подтвердите это.
Используйте полный путь для того файла.
/mnt/f/C_F/ex
Это должно всегда работать независимо от Вашего текущего рабочего каталога. Обычно, вероятно, необходимо предпочесть полные пути в рамках сценариев поэтому (хотя существуют важные исключения).
Можно всегда использовать относительный или полный путь для исполняемого файла
Когда Вы находитесь в /mnt/f
, можно работать:
C_F/ex
# or
/mnt/f/C_F/ex
Любой 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 и функции оболочки.