Выполнять команды в указанное время [дубликат]

Вы можете использовать команду column (если вы используете Linux), чтобы отформатировать данные в столбцы с разделителями табуляции. Однако я не думаю, что вы можете указать другую ширину столбца для первого столбца по сравнению с другими столбцами.

bash-[24]$ column -t /tmp/output
4TO/struct-2222332/coord-2222332.out:  FINAL  HEAT  OF  FORMATION  =  -299.61496  KCAL/MOL  =  -1253.58899  KJ/MOL
2E/struct-1212123/coord-1212123.out:   FINAL  HEAT  OF  FORMATION  =  -299.61496  KCAL/MOL  =  -1253.58901  KJ/MOL
OT4/struct-2222121/coord-2222121.out:  FINAL  HEAT  OF  FORMATION  =  -299.61497  KCAL/MOL  =  -1253.58904  KJ/MOL
E3/struct-1312322/coord-1312322.out:   FINAL  HEAT  OF  FORMATION  =  -299.61497  KCAL/MOL  =  -1253.58903  KJ/MOL

Другой вариант — разобрать файлы, разделить поля и обработать столбцы самостоятельно с помощью awk и printf().

bash-[54]$ awk '{printf "%-40s",$1 ; $1=""; printf "%-s\n",$0}' /tmp/output
4TO/struct-2222332/coord-2222332.out:    FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58899 KJ/MOL
2E/struct-1212123/coord-1212123.out:     FINAL HEAT OF FORMATION = -299.61496 KCAL/MOL = -1253.58901 KJ/MOL
OT4/struct-2222121/coord-2222121.out:    FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58904 KJ/MOL
E3/struct-1312322/coord-1312322.out:     FINAL HEAT OF FORMATION = -299.61497 KCAL/MOL = -1253.58903 KJ/MOL
1
29.10.2018, 05:46
2 ответа

at получает ввод по стандарту в:

$ echo 'find / -name *.mp3 > ~/desktop/all_musics.md 2>/dev/null' | at now + 10 minutes
0
28.01.2020, 00:24

find /Поиск всех файлов во всей системе неэффективен, вам следует сузить путь поиска.

Предположим:

  • Ваш путь поиска mp3:~/Downloads/misc/mp3/
  • найти результат для сохранения в путь списка воспроизведения~/Downloads/misc/mp3/my_mp3.list
  • В вашей системе работает среда рабочего стола gnome
  • mpvплеер установлен в вашей системе.

Вы можете запустить эту -команду лайнера:

sudo service atd start;
(find ~/Downloads/misc/mp3/ -type f -iname '*.mp3' -print0 2>/dev/null >~/Downloads/misc/mp3/my_mp3.list &);
echo 'export "XDG_CURRENT_DESKTOP=GNOME";
export "GNOME_DESKTOP_SESSION_ID=this-is-deprecated";
export "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus";
export "DISPLAY=:0";
cat ~/Downloads/misc/mp3/my_mp3.list | xargs -0 mpv --player-operation-mode=pseudo-gui' | at now + 1 minute

Пояснение:

  • sudo service atd start;запустить atdдемон, если демон еще не запущен.
  • at now + 1 minuteне означает воспроизведение звука через одну минуту, но означает воспроизведение в следующую минуту текущей минуты, поэтому истекшее время на самом деле меньше или равно 1 минуте.
  • Гарантирует предоставление полного пути, так как atзадача будет cdисходным путем при указании atв это время. Это не будет работать, если ваш целевой относительный путь не тот путь. Вы узнаете это, если выполните at -c <pending_job_number>для запроса содержимого сценария оболочки. Запустите atq, чтобы узнать количество ожидающих заданий.
  • ( 2>/dev/null &);Трюк может подавить любой дополнительный вывод на ваш терминал.
  • -print0и xargs -0вместе делают имя файла воспроизводимым, даже если оно содержит специальный символ новой строки.
  • Вам нужно --player-operation-mode=pseudo-gui, так как mp3 — это только аудио, а по умолчанию нет всплывающего графического интерфейса для видео, чтобы вы могли управлять им. И не ставьте xargs -o, в atdон работать не будет.
  • XDG_CURRENT_DESKTOP, GNOME_DESKTOP_SESSION_ID, DBUS_SESSION_BUS_ADDRESSи DISPLAYявляются важными переменными среды в среде рабочего стола GNOME, чтобы некоторые приложения с графическим интерфейсом работали правильно и отображались. Для mpvдля воспроизведения mp3 критической переменной является DISPLAY.

Как и в других демонах, таких как cron, atdтакже отсутствуют переменные среды для корректной работы графического приложения, как описано вman at:

For both at and batch, commands are read from standard input or the file specified with the -f option and executed. The working directory, the environment (except for the variables BASH_VERSINFO, DISPLAY, EUID, GROUPS, SHELLOPTS, TERM, UID, and _) and the umask are retained from the time of invocation

В этом случае DISPLAY может быть недостаточно для других приложений с графическим интерфейсом, чтобы определить переменные среды, необходимые для вашей программы в вашей системе, без изучения исходного кода:

  1. Запустите declare -p > /tmp/d.sh, чтобы сохранить атрибуты и значения имени переменной среды. env > /tmp/d.shудалит кавычки и не подходит для прямого re -use, вот почему я предлагаю использовать declare -p > /tmp/d.sh.

  2. Сохраните это в своем/tmp/test.sh:

    . /tmp/d.sh
    mpv --player-operation-mode=pseudo-gui foo.mp3
    
  3. И постоянно тестируйте этот скрипт. Если он может воспроизводиться правильно, сузьте круг, удалив половину /tmp/d.sh; или отмените удаленный контент и попробуйте удалить другую часть. Но гарантирует, что половина инструкции declareне будет удалена. И вам не нужно удалять DISPLAY, который обычно требуется для приложения с графическим интерфейсом.

    env -i bash /tmp/test.sh

  4. В конце концов вы сможете получить критическую env var (s )для вашей программы. Концепция состоит в том, чтобы env -iудалить все переменные окружения, затем источник оставшихся переменных среды.

  5. Этот метод не гарантирует корректную работу всех функций, т.е. программа медленно запускается, так как для некоторых функций могут потребоваться другие переменные. Вам нужно повторить шаги, чтобы выяснить для этой функции.

Кроме того, не забывайте о существовании sleepкоманды:

( (find ~/Downloads/misc/mp3/ -type f -iname '*.mp3' -print0 2>/dev/null >~/Downloads/misc/mp3/my_mp3.list) & pid=$!; sleep 600; kill -9 $pid 2>/dev/null; cat ~/Downloads/misc/mp3/my_mp3.list | xargs -0 mpv --player-operation-mode=pseudo-gui) &
0
28.01.2020, 00:24

Теги

Похожие вопросы