Как сказал Бени Чернявский-Паскин и Пол Ламмерцма в вышеприведенных комментариях xinput map-to-output <device> <output> сделал трюк для меня!
вам сначала нужно запустить xinput, чтобы получить идентификатор inupt-устройства, [!d1 ]
приведенная выше команда возвращает что-то вроде этого для меня.
user@user-hpEnvy:~$ xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID:401b id=10 [slave pointer (2)]
⎜ ↳ Logitech Unifying Device. Wireless PID:4016 id=11 [slave pointer (2)]
⎜ ↳ ELAN20E7:00 04F3:20E7 id=13 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=15 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Power Button id=9 [slave keyboard (3)]
↳ HP Truevision HD id=12 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ HP Wireless hotkeys id=16 [slave keyboard (3)]
↳ HP WMI hotkeys
Затем я запустил xrandr, чтобы получить список экранов, а вывод команды подобен этому
[ f2]В моем случае сенсорное устройство ELAN20E7:00 04F3:20E7 id=13, а экран с сенсорным экраном eDP1, чтобы исправить проблему, мне нужно отобразить устройство на этом мониторе только для этого, я выполнил эту команду xinput map-to-output 13 eDP1
Проблема решена и ее работа отлично снова :)
am используя элементарную ОС freya, поэтому она должна работать для всех дистрибутивов на основе ubntu 14.04 LTS
Вот ужасно запутанная оболочка с одним слоем (с использованием формата даты, который вы упомянули в чате):
$ name=$(printf 'backup-logfiles-%s-til-%s' $(date -d "$(head -n1 logfile | grep -oP '\[\K\S+' | sed 's|/| |g; s/:/ /')" +%Y-%m-%d-%H:%M:%S) $(date -d "$(tail -n1 logfile | grep -oP '\[\K\S+' | sed 's|/| |g; s/:/ /')" +%Y-%m-%d-%H:%M:%S))
$ echo $name
logfiles-2017-01-21-14:53:49-til-2017-12-20-16:17:50
Чтобы получить начальную и конечную переменные отдельно, выполните:
$ start=$(head -n1 logfile | grep -oP '\[\K\S+' | sed 's|/|-|g; s/:/ /')
$ end=$(tail -n1 logfile | grep -oP '\[\K\S+' | sed 's|/|-|g; s/:/ /')
$ echo "backup-logfiles-$start-til-$end.tar.gz"
backup-logfiles-21-Jan-2017 14:53:49-til-20-Dec-2017 16:17:50.tar.gz
Или, если вы хотите числовую дату:
$ start=$(date -d "$(head -n1 logfile | grep -oP '\[\K\S+' | sed 's|/|-|g; s/:/ /')" +%Y-%m-%d-%H:%M:%S)
$ end=$(date -d "$(tail -n1 logfile | grep -oP '\[\K\S+' | sed 's|/|-|g; s/:/ /')" +%Y-%m-%d-%H:%M:%S)
$ echo "backup-logfiles-$start-til-$end.tar.gz"
backup-logfiles-2017-01-21-14:53:49-til-2017-12-20-16:17:50.tar.gz
Использование только sed, только для веселого гольфа;)
name=$(sed -rn 's|/|-|g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
$ echo $name
21-Jan-2017:14:53:49-til-20-Dec-2017:16:17:50
Но если этот файл - это то, что вы хотите передать на tar, двоеточия могут вызвать проблемы:
An archive name that has a colon in it specifies a file or device on a remote
machine. The part before the colon is taken as the machine name or IP address,
and the part after it as the file or device pathname, e.g.:
--file=remotehost:/dev/sr0
Вы можете обойти это, передав опцию:
--force-local
Archive file is local even if it has a colon.
Но вот команда, которая заменяет двоеточия более дефисом:
name=$(sed -rn 's|[/:]|-|g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
Вместо этого из символьного класса мы могли бы использовать чередование и сохранить байт:)
name=$(sed -rn 's#/|:#-#g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
Использование только sed, только для веселого гольфа;)
name=$(sed -rn 's|/|-|g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
$ echo $name
21-Jan-2017:14:53:49-til-20-Dec-2017:16:17:50
Но если этот файл - это то, что вы хотите передать на tar, двоеточия могут вызвать проблемы: [!d2 ]
An archive name that has a colon in it specifies a file or device on a remote
machine. The part before the colon is taken as the machine name or IP address,
and the part after it as the file or device pathname, e.g.:
--file=remotehost:/dev/sr0
Вы можете обойти это, передав опцию:
--force-local
Archive file is local even if it has a colon.
Но вот команда, которая заменяет двоеточия более дефисом:
name=$(sed -rn 's|[/:]|-|g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
Вместо этого из символьного класса мы могли бы использовать чередование и сохранить байт:)
name=$(sed -rn 's#/|:#-#g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
Использование только sed, только для веселого гольфа;)
name=$(sed -rn 's|/|-|g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
$ echo $name
21-Jan-2017:14:53:49-til-20-Dec-2017:16:17:50
Но если этот файл - это то, что вы хотите передать на tar, двоеточия могут вызвать проблемы:
An archive name that has a colon in it specifies a file or device on a remote
machine. The part before the colon is taken as the machine name or IP address,
and the part after it as the file or device pathname, e.g.:
--file=remotehost:/dev/sr0
Вы можете обойти это, передав опцию:
--force-local
Archive file is local even if it has a colon.
Но вот команда, которая заменяет двоеточия более дефисом:
name=$(sed -rn 's|[/:]|-|g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')
Вместо этого из символьного класса мы могли бы использовать чередование и сохранить байт:)
name=$(sed -rn 's#/|:#-#g;s/.* \[([^ ]+) .*/\1/;1p;$p' file | sed 'N;s/\n/-til-/')