2
cd "$(mkdir -v "$(date -R)"|sed s+.`(.*)'.*)"

Это предназначено для создания каталога с именем $(date -R) . Я мог бы просто cd $(date -R) , но виновником является то, что дата может измениться с момента запуска предыдущей команды (mkdir).

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

Изменение ' на \' не меняет результат. Если у вас есть лучший способ сделать это, скажите, пожалуйста.

4 ответа4

12

ИМХО ты делаешь что-то простое без необходимости сложное. Почему бы просто не сделать что-то простое, как.

NEWDIR=$(date -R);mkdir "$NEWDIR";cd "$NEWDIR"
4

С bash вы также можете использовать расширение истории :

mkdir "$(date -R)" && cd !#:^
2

Часть sed в вашей команде довольно неработоспособна. Попробуй это:

sed -e "s/.*\`\(.*\)'.*/\1/"

Если вы часто хотите использовать mkdir и cd за один шаг, попробуйте эту (только для bash) функцию:

mdc () { mkdir "$@" && cd "${!#}"; }

Это просто обволакивает mkdir . Используйте его как mdc [mkdir options] newdir и убедитесь, что newdir идет последним.

1

Побочное замечание: вам не нужно использовать sed для вывода date , потому что сама date имеет несколько собственных хороших инструментов форматирования. Если вы передаете date строку, начинающуюся с '+', вы можете использовать коды форматирования из strftime.

$ date '+%Y-%m-%d_%H-%M-%S'

Лично я бы использовал что-то сортируемое для имени каталога, что означает, что я никогда не буду использовать "Пт" в качестве начальной части имени.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .