Различают имя каталога или путь к каталогу - PullRequest
2 голосов
/ 11 мая 2011

У меня есть сценарий оболочки, который берет имя каталога или путь к командной строке каталога и создает этот каталог. Если я хочу определить, является ли аргумент допустимым путем или только именем каталога, как я могу добиться этого? Как будто передано имя-каталога, этот каталог будет создан в том месте, откуда выполняется скрипт, и если это путь, каталог будет создан по этому пути. Так что это различие необходимо для моего сценария.

Спасибо и всего наилучшего.

Ответы [ 3 ]

1 голос
/ 11 мая 2011

Я не уверен, что вы имеете в виду, и не уверен, что вам нужно проводить различие: mkdir -- "$1" создает каталог независимо от того, как вы представляете ему имя.

Чтобы проверить, является ли первый аргументпростое имя каталога без компонента пути (например, foo, но не foo/bar или /abso/lute), проверьте, содержит ли оно /:

case "$1" in
  */*) echo "contains multiple path components";;
  *) echo "no slash, just a base name";;
esac

Чтобы проверить, является ли первый аргументОтносительный путь или абсолютный путь, проверьте, начинается ли он с /:

case "$1" in
  /*) echo "absolute";;
  *) echo "relative";;
esac

Если это применимо, рассматриваете ли вы файл или каталог.

1 голос
/ 11 мая 2011

Некоторые программы по-разному обрабатывают аргументы с завершающим символом '/'.Обратите внимание:

./foo x

./foo x/

Тем не менее, я бы рекомендовал использовать «тег» / «опция», если это применимо, так как вышеприведенное - очень тонкая деталь, которую следует пропустить.(Думайте о пользователях!).

./foo -p x

./foo --path=x

./foo x

Удачного кодирования.

0 голосов
/ 11 мая 2011
dir=$(dirname -- "$1")

if test "$dir" != '.'; then
    echo 'Path'
else
    echo 'Directory'
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...