mkdir нет такой ошибки синтаксиса файла или каталога? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь автоматически создать уникальную папку для авто.Поэтому я пытаюсь назвать папку после отметки даты и времени.

приведенный ниже код - это то, что я уже пробовал.

#! /bin/bash
d_space=$(date)
d_nospace= echo ${d_space//[[:blanl:]]/}
echo $d_nospace
mkdir -p "$d_nospace"

WedMay2920:52:47EDT2019
mkdir: cannot create directory '': No such file or directory

Ответы [ 2 ]

2 голосов
/ 30 мая 2019
d_nospace= echo ${d_space//[[:blanl:]]/}

Вам не хватает оператора $(...) захвата.После знака равенства не должно быть пробела.И blanl должно быть blank.

d_nospace=$(echo ${d_space//[[:blank:]]/})

Давайте избавимся от бесполезного использования echo .Нет необходимости выводить переменную и затем записывать вывод.Просто назначьте переменную напрямую.

d_nospace=${d_space//[[:blank:]]/}

(Кстати, вам не нужно избавляться от пробелов. Имена каталогов могут содержать пробелы, это нормально.)

0 голосов
/ 30 мая 2019
d_nospace= echo ${d_space//[[:blanl:]]/}
...
mkdir -p "$d_nospace"

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

В переменной не должно быть пробелов до или после символа =.Вы можете назначить переменную как часть другой команды, например:

foo=bar some_command

выполнит some_command с $foo, установленным на bar.

Таким образом, ваша команда вызываетКоманда echo с переменной d_nospace, установленной в ничто.

Как указывает ответ Джона , вам не нужно использовать echo здесь - на самом деле это не так.не имеет смысла делать это.Если вы хотите удалить пробелы, вы бы написали:

d_nospace="${d_space//[[:blanl:]]/}"

(я не проверял это на точность; не должно ли это быть [[:blank:]]?

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

Вот какЯ бы сделал это:

now="$(date +%F-%H%M%S)"
mkdir -p "$now"

Когда я напишу это, имя каталога будет 2019-05-29-191819, которое достаточно читабельно, хорошо сортируется и позволяет избежать проблемных символов.

...