Вы можете использовать команду 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
at получает ввод по стандарту в:
$ echo 'find / -name *.mp3 > ~/desktop/all_musics.md 2>/dev/null' | at now + 10 minutes
find /
Поиск всех файлов во всей системе неэффективен, вам следует сузить путь поиска.
Предположим:
~/Downloads/misc/mp3/
~/Downloads/misc/mp3/my_mp3.list
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 может быть недостаточно для других приложений с графическим интерфейсом, чтобы определить переменные среды, необходимые для вашей программы в вашей системе, без изучения исходного кода:
Запустите declare -p > /tmp/d.sh
, чтобы сохранить атрибуты и значения имени переменной среды. env > /tmp/d.sh
удалит кавычки и не подходит для прямого re -use, вот почему я предлагаю использовать declare -p > /tmp/d.sh
.
Сохраните это в своем/tmp/test.sh
:
. /tmp/d.sh
mpv --player-operation-mode=pseudo-gui foo.mp3
И постоянно тестируйте этот скрипт. Если он может воспроизводиться правильно, сузьте круг, удалив половину /tmp/d.sh
; или отмените удаленный контент и попробуйте удалить другую часть. Но гарантирует, что половина инструкции declare
не будет удалена. И вам не нужно удалять DISPLAY
, который обычно требуется для приложения с графическим интерфейсом.
env -i bash /tmp/test.sh
В конце концов вы сможете получить критическую env var (s )для вашей программы. Концепция состоит в том, чтобы env -i
удалить все переменные окружения, затем источник оставшихся переменных среды.
Этот метод не гарантирует корректную работу всех функций, т.е. программа медленно запускается, так как для некоторых функций могут потребоваться другие переменные. Вам нужно повторить шаги, чтобы выяснить для этой функции.
Кроме того, не забывайте о существовании 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) &