Все привязки клавиш экрана GNU работают точно так же в byobu.
Чтобы выбрать окно , просто нажмите Ctrl + a , затем Номер окна
Обратите внимание, что Ctrl + a конфликтует с привязкой ключей GNU Emacs, поэтому byobu
попросит вас выбрать поведение.
В любом случае вы можете использовать Ctrl + a , затем a , чтобы перейти к началу строки в режиме привязки ключей Emacs.
Cuando lo haces
NOW=`date '+%F_%H:%M:%S'`
o, utilizando una sintaxis más moderna,
NOW=$( date '+%F_%H:%M:%S' )
la variable NOW
se establecerá en la salida del comando date
en el momento en que se ejecute esa línea. Si hace esto en ~/.bashrc
, entonces $NOW
será una marca de tiempo que le indicará cuándo inició la sesión de shell interactiva actual.
También puede establecer el valor de la variable con
printf -v NOW '%(%F_%H:%M:%S)T' -1
si está utilizando bash
versión 4.2 o posterior. Esto imprime la marca de tiempo directamente en la variable sin llamar a date
.
En el script que está mostrando, la variable NOW
se establece cuando se ejecuta el script (esto es lo que desea ).
Cuando la asignación
filename="/home/pi/gets/$NOW.jpg"
, el shell expandirá la variable en la cadena. Lo hace aunque esté entre comillas dobles. Las comillas simples impiden que el shell expanda las variables incrustadas (esto es no lo que desea en este caso ).
Sin embargo, tenga en cuenta que no parece utilizar la variable filename
en la llamada a raspistill
, por lo que no estoy seguro de por qué establece su valor, a menos que solo quiera que echo
lo emita en el fin.
En el resto del código, debe comillas dobles la $NOW
expansión variable (y$filename
). Si no lo hace, y luego cambia la forma en que define NOW
para que incluya espacios o comodines (patrones de englobamiento de nombres de archivo ), los comandos que usan $NOW
pueden fallar al analizar su línea de comando correctamente.
Comparar, por ejemplo,
string="hello * there"
printf 'the string is "%s"\n' $string
con
string="hello * there"
printf 'the string is "%s"\n' "$string"
Cosas relacionadas:
Acerca de los acentos graves en las sustituciones de comandos:¿Han quedado obsoletos los acentos graves (, es decir, `cmd `)en *sh shells?
Acerca de citar expansiones de variables:Implicaciones de seguridad de olvidar citar una variable en shells bash/POSIX y ¿Por qué mi script de shell se ahoga con espacios en blanco u otros caracteres especiales?
Этот ответ представляет собой несколько практических указаний:
Не используйте для именования файлов такие символы, как :
! Прежде чем использовать какой-либо не -буквенно-цифровой символ, спросите себя, не может ли он испортить любой будущий сценарий или командную строку с помощью -лайнера. Вместо этого используйте тире или подчеркивание или просто соедините элементы без разделителя.
Поскольку ваш вопрос указывает на то, что вы используете bash
, вы должны знать, что последние версии этой оболочки включают собственную версию вывода спецификации даты -с помощью собственной команды оболочки printf
. Используйте это так:
printf "%(%F_%H%M%S)T"
или
NOW=$(printf "%(%F_%H%M%S)T")
или даже
printf -v NOW "%(%F_%H%M%S)T"
(что позволяет избежать разветвления дополнительного процесса)
Версия bash
печати даты -спецификация имеет дополнительное преимущество, состоящее в двух функциях, отсутствующих в противном случае :" -1 представляет текущее время, а -2 представляет время, когда оболочка была вызывается. Если аргумент не указан, преобразование ведет себя так, как если бы было задано -1." Например,
printf -v THEN "%(%F_%H%M%S)T" -2
Я искал способ действительно обновлять время во время работы скрипта в bash, чтобы предотвратить stompage для файлов, которые я обновлял более одного раза (да да )и по-прежнему просто «назначать» к переменной. Почти уверен, что это не проблема в Perl, но это было давно.
Ответ пользователя 1404316 не работает для меня с bash 4.2 на RHEL.
Вот как я решил эту проблему в bash 4.2:
#!/bin/bash
now=$(printf "%(%F_%H%M%S)T")
echo printf: ${now}
sleep 1
echo printf after 1: ${now}
# Tried backticks here too :(
then="$(date +%s)"
# This is your now date
now() { date +%s; }
# This is how you use it
filename="something.$(now)"
echo "now ${filename}"
filename="something.${then}"
echo "then ${filename}"
sleep 1
filename2="something.$(now)"
echo "now ${filename2}"
filename2="something.${then}"
echo "then ${filename2}"
и выход:
printf: 1969-12-31_190000
printf after 1: 1969-12-31_190000
now something.1588791459
then something.1588791459
now something.1588791460
then something.1588791459
Надеюсь, это кому-нибудь поможет:)