как Unix обрабатывает имя полного пути с пространством и аргументами?

Как Unix обрабатывает имя полного пути с пространством и аргументами?
В окнах мы заключаем путь в кавычки и добавляем параметры командной строки после, как это находится в Unix?

 "c:\foo folder with space\foo.exe" -help

обновление:

Я имел в виду, как я распознаю путь от параметров командной строки.

23
задан e-sushi 2 December 2013 в 13:13
поделиться

6 ответов

Можно или заключить его в кавычки как пример Windows выше или выйти из пробелов с обратными косыми чертами:

 "/foo folder with space/foo" --help
 /foo\ folder\ with\ space/foo --help
39
ответ дан DonBecker 29 November 2019 в 01:25
поделиться

Вы можете заключить в кавычки, если хотите, или можете избежать пробелов с предшествующим \, но большинство путей UNIX (за исключением Mac OS X) не содержат пробелов.

/Applications/Image\ Capture.app/Contents/MacOS/Image\ Capture

"/Applications/Image Capture.app/Contents/MacOS/Image Capture"

/Applications/"Image Capture.app"/Contents/MacOS/"Image Capture"

Все ссылаются на один и тот же исполняемый файл под Mac OS X.

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

10
ответ дан Kyle Cronin 29 November 2019 в 01:25
поделиться

Поскольку пробелы используются для разделения аргументов командной строки, они должны быть экранированы от оболочки. Это можно сделать с помощью обратной косой черты () или кавычек:

"/path/with/spaces in it/to/a/file"
somecommand -spaced\ option
somecommand "-spaced option"
somecommand '-spaced option'

Предполагается, что вы работаете из оболочки. Если вы пишете код, вы обычно можете передавать аргументы напрямую, избегая проблемы:

Пример в perl. Вместо этого:

print("code sample"); system («опция somecommand -spaced»);

вы можете сделать

print("code sample"); system («somecommand», «-spaced») option ");

Поскольку при передаче вызова system () список не разбивает аргументы в пространствах, как при вызове с одним аргументом.

3
ответ дан zigdon 29 November 2019 в 01:25
поделиться

Вы можете указать весь путь, как в окнах, или вы можете выйти из пробелов, как в:

/foo\ folder\ with\ space/foo.sh -help

Оба способа будут работать!

1
ответ дан Fernando Barrocal 29 November 2019 в 01:25
поделиться

Также будьте осторожны с двойными кавычками - в оболочке Unix это расширяет переменные. Некоторые из них очевидны (например, $foo и \t), а некоторые нет (например, !foo).

В целях безопасности используйте одинарные кавычки!

1
ответ дан Jason Cohen 29 November 2019 в 01:25
поделиться

Если обычные способы не работают, попробуйте заменить пробелы на %20.

Это сработало для меня при работе с SSH и другими командами в стиле домена, такими как auto_smb.

0
ответ дан atwixtor 29 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

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