Как я могу играть звук, когда выполнение сценария готово?

Здесь для документов нужны новые строки. Например, в сценарии оболочки, можно записать

cat <<EOF >somefile; echo  done
file contents
EOF

Я не думаю, что tmux позволяет Вам поместить новые строки там, и даже если бы он сделал, то это не было бы хорошим подходом. Что, если сами данные содержат HERE один на строке (например, потому что Вы копируете Ваш .tmux.conf)?

Я предлагаю записать содержимое буфера во временный файл. Непротестированный:

bind-key p save-buffer ~/.tmux-buffer \; run-shell "xsel -i -b <~/.tmux-buffer && rm ~/.tmux-buffer"

Существует состояние состязания при использовании этой команды в двух отдельных tmux экземплярах. Я не знаю, как решить это.

46
05.03.2011, 01:00
7 ответов

Добавьте любую команду, которая играет звук; это могло быть столь же просто как

$ time mycommand; printf '\7'

или столь же сложный как

$ time mycommand && paplay itworked.ogg || paplay bombed.ogg

(Команды предполагают, что pulseaudio установлен; замените своим звуковым плеером, который будет зависеть от Вашей настольной среды.)

40
27.01.2020, 19:34
  • 1
    +1 paplay вероятно, лучшая команда для использования для проигрывания звука в "современной" системе Linux. –  Mikel 05.03.2011, 01:21
  • 2
    printf '\7' не работает на меня, но эта команда работала, поскольку я хотел это time python MyScript.py -n 40 && paplay /usr/share/sounds/ubuntu/stereo/desktop-login.ogg || paplay /usr/share/sounds/ubuntu/stereo/phone-outgoing-busy.ogg –  Martin Thoma 05.03.2011, 22:43
  • 3
    printf '\7' работы для меня (paplay не делает; (оболочка мерзавца)), но это - просто очень маленькая четность с чередованием по битам. Есть ли больше кодов, которые делают другие звуки? Я попробовал \6, \8 но они - некоторые символы. –  laggingreflex 18.09.2014, 02:20
  • 4
    @laggingreflex нет, \7 (BEL) обычно является единственным символом, который возможно инициировал звук (см. Управляющий символ статьи Wikipedia); обратите внимание, что это не может всегда делать звук, также. –  musiphil 20.11.2014, 20:31
  • 5
    @laggingreflex нет, \7 (BEL) обычно является единственным символом, который возможно инициировал звук (см. Управляющий символ статьи Wikipedia); обратите внимание, что это не может всегда делать звук, также. –  musiphil 20.11.2014, 20:31
  • 6
    @laggingreflex Вам, вероятно, не нужно это больше, но только для смеха ;) for i in {1..30}; do for j in {1..3}; do printf '\7'; sleep 0.12; done; sleep 0.4; done –  cprn 24.08.2015, 23:49

Просто выберите звук на своем жестком диске и поместите команду для проигрывания его прямо после команды, на которой Вы ожидаете; они произойдут последовательно:

$ time python MyScript.py; mplayer ~/ScriptDone.wav

(Можно использовать любой плеер, естественно). Мне назвали сценарий alertdone это играет тон и показывает предупреждение libnotify, когда выполнено; я использую его для точно этого случая:

$ time python MyScript.py; alertdone "Done timing"

Это действительно просто, поэтому если Вы хотите сделать свое собственное, можно основывать его на этом (мой требует notify-more, mplayer, и ~/tones/alert_1.wav хотя):

#!/bin/bash
message=${1:-"Finished working"}
notify-more -t 10000 -i /usr/share/icons/gnome/32x32/actions/insert-object.png "Process Finished" "$message"
mplayer ~/tones/alert_1.wav
9
27.01.2020, 19:34
  • 1
    notify-more или notify-send могли действительно быть полезные альтернативы проигрыванию звука. –  Mikel 05.03.2011, 01:19
  • 2
    @Mikel я полностью увлекаются libnotify; все в моей системе открывается уведомления –  Michael Mrozek♦ 05.03.2011, 01:31
time python MyScript.py; play /path/so/sound.ogg

play очень простое (никакой UI) звучат как плеер от носкиНоски установки http://bit.ly/software-smallпакета . Можно заменить его любым другим управляемым командной строкой звуковым плеером.

8
27.01.2020, 19:34
  • 1
    Да, play, aplay, или paplay. (Моя система Ubuntu имеет aplay и paplay по умолчанию.) –  Mikel 05.03.2011, 01:20
  • 2
    time python MyScript.py -n 40; paplay /usr/share/sounds/ubuntu/stereo/desktop-login.ogg обработанный, спасибо. –  Martin Thoma 05.03.2011, 22:46

Можно также заставить это произойти автоматически.

Я покажу Вам как в zsh, затем добавьте информацию о bash.

Сущность похожа на это:

preexec()
{
    starttime=$SECONDS
}

precmd()
{
    if ((SECONDS - starttime >= 5)); then
        aplay "sound.wav"
        # or printf "\b", or notify-send, or whatever
    fi
}

Можно также заставить его только сделать это, если программой был Python, например.

preexec()
{
    starttime=$SECONDS
    case $3 in python*)
        command_is_python=true;;
    *)
        command_is_python=false;;
    esac
}

precmd()
{
    if $command_is_python && ((SECONDS - starttime >= 5)); then
        aplay "sound.wav"
        # or printf "\b", or notify-send, or whatever
    fi
}

В bash, лучший способ состоит в том, чтобы загрузить preexec.bash.txt и получить его (например. . ~/preexec.bash.txt наверху Вашего ~/.bashrc, затем вышеупомянутое (или что-то близко к нему) должно работать. (Не уверенный в $3 бит, чтобы проверить, является ли командой Python.)

Если бы Вы используете Терминал GNOME, я также указал бы на Вас на Высвечивание Терминала GNOME. Это - патч, я записал, что это делает терминальное мигание, когда команда сделана, таким образом, Вы можете Alt-Tab к чему-то еще, затем это сообщает, когда это сделано.

3
27.01.2020, 19:34

Зеркала в данном случае относятся к альтернативным веб-адресам, содержащим ту же самую информацию, чтобы вы могли загрузить то, что вы хотите (пакеты) с самого быстрого.

-121--83235-

Арка использует два уровня зеркал; первый, уровень 1, синхронизируется непосредственно с archlinux.org каждый час. Уровень 2 выполняет синхронизацию с уровнем 1. Синхронизация с archlinux.org напрямую запрещена.

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

Технически не требуется вести список из нескольких зеркал; если у вас есть локальное зеркало, которое надежно и не устаревает (вы можете проверить, посетив страницу состояния зеркала , или используя инструмент, такой как рефлектор , чтобы автоматически создать актуальный список для вас), то вы можете просто иметь одну запись в вашем зеркальном списке.

Поскольку Arch является скользящим выпуском, важно обеспечить постоянное обновление локальной базы данных (с помощью pacman -Syu ) и синхронизацию с зеркалом, которое также является актуальным для archlinux.org. Одна из наиболее распространенных проблем, с которой сталкиваются новички в Arch, заключается в том, что они не понимают эту связь, а затем обнаруживают, что они не могут выполнить обновление, поскольку их локальная база данных не соответствует текущим репозиториям, поэтому pacman пожалуется на то, что быть не может найти версию xx пакета.

Если вы прочитаете /etc/pacman.conf , вы увидите, что он содержит несколько репозиториев: [core], [extra] и [community], с возможностью включения [test], [multilib] и пользовательских репозиториев. Эти репозитории содержат все официально поддерживаемые пакеты; таким образом, каждый будет синхронизирован с зеркалом из archlinux.org, за исключением пользовательских репо, которые размещаются членами сообщества Arch.

Дополнительную информацию о работе зеркал Arch можно найти на странице отображения вики .

-121--83234-

Можно использовать любой проигрыватель. Я добавляю cvlc для полноты.

-1
27.01.2020, 19:34

spd-say

sleep 2; spd-say 'get back to work'

Бесконечный цикл с -w, если вам нужна дополнительная мотивация:

sleep 2; while true; do spd-say -w 'get back to work'; done

Предустановлен на 14.04 через пакет speech-dispatcher: http://releases.ubuntu.com/trusty/ubuntu-14.04.4-desktop-amd64.manifest для слепых людей, я полагаю?

Также добавьте всплывающее окно

Это комбо - спасатель жизни (b означает beep):

b() ( spd-say 'done'; zenity --info --text "$(date);$(pwd)" & )

и затем:

super-slow-command;b

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

В противном случае я увижу всплывающее окно, когда вернусь к компьютеру.

Похожие: https://stackoverflow.com/questions/7035/how-to-show-a-gui-message-box-from-a-bash-script-in-linux

18
27.01.2020, 19:34

Лично я использую my-script && notify-send "done". Это отправляет уведомление на рабочий стол, которое в Linux Mint (Cinnamon )выглядит так:

enter image description here

5
27.01.2020, 19:34

Теги

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