LinuxForum.Fans
Тема

Время в имени файла

Автор: Vyacheslav_Kruglov 17 сообщений 1371 просмотров
15.12.2014 23:50 #405324

Хочу создать файл с текущим временем в качестве названия.
Их терминала это делается в два счета:

text
touch /home/user/files/`date +%H:%M`

или

text
touch /home/user/files/$(date +%H:%M)

Но.
Теперь я хочу делать то же самое, назначив на это действие горячую клавишу.
Идем в параметры системы в настройки клавиатуры. Добавляем HotKey.
В качестве команды говорим:

text
touch /home/user/files/`date +%H:%M`

В качестве сочетания клавиш задаем, к примеру, Ctrl+up.

Нажимаем наши клавиши.
Система не понимает вот это:

text
`date +%H:%M`

и создает 2 файла: один /home/user/`date
И второй: /home/+H:M`

Вопрос: почему происходит так, а не как в терминале?
И как мне это выпрямить?

Дистрибутив Arch Linux.

15.12.2014 23:53 #405325

попробуй touch "/home/user/files/`date +%H:%M`"

16.12.2014 00:03 · отредактировано #405328

Не работает.
Этой командой создается один файл в /home/user/files/ с именем:

text
`date +:`

Вызов этой команды в консоли ничем не отличается от описанного в 1 посте.

16.12.2014 00:07 #405329

Кстати, уважаемые знатоки!

Объясните, пожалуйста, что происходит, когда я ввожу в консоли в имени файла конструкцию:

text
... $(...)

?

16.12.2014 00:25 · отредактировано #405331
"Vyacheslav.Kruglov" написал:
Вопрос: почему происходит так, а не как в терминале?

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

"Vyacheslav.Kruglov" написал:
И как мне это выпрямить?

как-то так должно заработать:
sh -c 'touch /home/user/files/`date +%H:%M`'

"Vyacheslav.Kruglov" написал:
Объясните, пожалуйста, что происходит, когда я ввожу в консоли в имени файла конструкцию:

тоже что и с обратными кавычками...
из аргументов за $():
- допускают вложенность, без геморроя с квотированием...
- возможны некоторые скрытые ошибки с `` в экзотических случаях...
против:
- некоторые очень старые и экзотичные шелы могут не поддерживать $(), а только ``

16.12.2014 00:39 #405334

как-то так должно заработать:
sh -c 'touch /home/user/files/`date +%H:%M`'

Увы. Должно, но не работает.
В нужной директории создается файл с наименованием :

К слову, что дает параметр -с ?

16.12.2014 01:16 #405341
"Vyacheslav.Kruglov" написал:
Увы. Должно, но не работает. В нужной директории создается файл с наименованием :

тогда надо экранировать проценты... или бекслешем, или вторым процентом...

"Vyacheslav.Kruglov" написал:
К слову, что дает параметр -с ?

запускает команду из командной строки... за подробностями man sh...

16.12.2014 01:19 · отредактировано #405342

Эммм
А если так:
touch /make_file
cat > /make_file
#!/bin/bash
touch /home/user/files/`date +%H:%M`

CTRL+D

chmod +x /make_file

ну а на хоткей уже вешать просто /make_file

16.12.2014 02:11 #405347

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

text

#!/usr/bin/bash
name=`date +%H:%M`
touch /home/user/files/${name}.txt

Правда после $name и перед расширением файла вставляется то ли табуляция, то ли перенос строки. Не знаю, как это убрать. В принципе, сойдет и так.

Завтра буду пробовать последовать советам двух последних комментариев.

16.12.2014 02:15 · отредактировано #405349

"Vyacheslav.Kruglov" написал:
Я методом тыка написал простенький скрипт, который и вызываю на горячую клавишу:
Та я тебе это и предлагал....
только еще проще.... Накой там переменную объявлять то???
достаточно:
text
touch /home/user/files/`date +%H:%M`.txt

UPD
Кста, оба варианта работают нормально, так что по поводу табуляций\пробелов - смотри нету ли их в тексте скрипта...

16.12.2014 02:57 · отредактировано #405355
"Vyacheslav.Kruglov" написал:
Я методом тыка написал простенький скрипт

костыль... не вкусно...

"Vyacheslav.Kruglov" написал:
#!/usr/bin/bash

а что за система такая?

"Vyacheslav.Kruglov" написал:
Правда после $name и перед расширением файла вставляется то ли табуляция, то ли перенос строки.

с виду всё нормально... единственное что на ум приходит, и что могло остаться не замеченным — \r в конце второй строки... cat -A <скрипт> для проверки

16.12.2014 03:02 · отредактировано #405356
"Fat-Zer" написал:
костыль... не вкусно...

Ну как есть....
Сам подобным пользуюсь...
...а шо делать...
попробуй нажать alt+F2 и подсунуть что-то эдакое: DISPLAY=:0 firefox
Вот и ходим на костылях.....

16.12.2014 04:45 #405357
"diablopc" написал:
попробуй нажать alt+F2 и подсунуть что-то эдакое: DISPLAY=:0 firefox

env DISPLAY=:0 firefox
УМВР

16.12.2014 13:55 #405380

Fat-Zer, :[

16.12.2014 17:28 · отредактировано #405438
diablopc написал:
Та я тебе это и предлагал....
только еще проще.... Накой там переменную объявлять то???
достаточно:
text
touch /home/user/files/`date +%H:%M`.txt

UPD
Кста, оба варианта работают нормально, так что по поводу табуляций\пробелов - смотри нету ли их в тексте скрипта...

Действительно.
В вашем варианте никаких пробелов нет.
В тексте скрипта ничего не нашел.

Fat-Zer написал:

а что за система такая?

ARCH 3.17.3-1

Fat-Zer написал:

с виду всё нормально... единственное что на ум приходит, и что могло остаться не замеченным — \r в конце второй строки... cat -A <скрипт> для проверки

$ стоит после каждой строки и все.

16.12.2014 18:00 #405461
"Vyacheslav.Kruglov" написал:
ARCH 3.17.3-1

X3 как оно конкретно в арче но обычно не #!/usr/bin/bash a #!/bin/bash

"Vyacheslav.Kruglov" написал:
В тексте скрипта ничего не нашел.

Должно что-то быть....
Не спроста оно что-то там лепит....

18.12.2014 14:31 #405725
text
#!/bin/bash

FILENAME=$(date)

touch "/tmp/$FILENAME"

Войдите или зарегистрируйтесь, чтобы ответить.