当我通过 SSH 在远程计算机上运行 bash 脚本时,如何让本地计算机发出声音?

问题描述 投票:0回答:2

我有一个脚本,当使用太多内存时会发出蜂鸣声。我想将此脚本部署到远程计算机并通过 SSH 运行它。不幸的是,它让远程计算机发出哔哔声,而不是我的。有什么办法解决这个问题吗?

#!/bin/bash
# Peter Black
# alarm.sh
max_percent=94
sleeper=1
frequency=1000
duration=300

# To enable the script:
# chmod u+x alert.sh

# get the total available memory:
function total_memory {
    echo "Total memory available: "
    TOTAL_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}')
    #Another way of doing that:
    #total_mem=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
    echo "---------- $TOTAL_MEM ---------------"
}


# alarm function params: frequency, duration
# Example:
# _alarm 400 200
_alarm() {
  ( \speaker-test --frequency $1 --test sine )&
  pid=$!
  \sleep 0.${2}s
  \kill -9 $pid
}

function total_available_memory {
    total_available_mem=$(</proc/meminfo grep MemTotal | grep -Eo '[0-9]+')
    total_free_mem=$(</proc/meminfo grep MemFree | grep -Eo '[0-9]+')
    total_used_mem=$((total_available_mem - total_free_mem))
    #percent_used=$((total_available_mem / total_free_mem))
    # print the free memory
    # customize the unit based on the format of your /proc/meminfo
    percent_used=$(printf '%i %i' $total_used_mem $total_available_mem | awk '{ pc=100*$1/$2; i=int(pc); print (pc-i<0.5)?i:i+1 }')

    if [ $percent_used -gt $max_percent ]; then
        echo "TOO MUCH MEMORY IS BEIGN USED!!!!!!!! KILL IT!"
        _alarm $frequency $duration
    fi

    echo "Available: $total_available_mem kb  -  Used: $total_used_mem kb  -  Free: $total_free_mem kb  -  Percent Used: $percent_used %"

}

# RUN THE FUNCTIONS IN AN INFINITE LOOP:
# total_memory

echo "Press [CTRL+C] to stop.."
while :
do
    total_available_memory
    sleep $sleeper
done
linux bash memory-management ssh
2个回答
1
投票

作为 bash,只需打印几次“响铃”字符,而不是使用您的扬声器测试程序……

echo -e "\007\007\007"
即使在您在远程计算机上执行的脚本中,它也会在本地发出声音。频率和音量是不同的问题......

编辑:更好的是,在每次铃响后睡觉,这样你就能听到它了! :)

for i in {0..10}
do
    echo -en "\007"
    sleep 0.5
done

0
投票

嗯,有一个很简单的方法:

ls -l >/dev/dsp

:-)

它将目录文本传送到声音输出中,就好像它是一个 wav 文件一样。听起来不太好 :-) 但令人震惊的是它很棒。它需要让内核模块生成

/dev/dsp
设备。

这仅适用于较旧的 Linux,因为

/dev/dsp
仅存在于此。


或者,您也可以在控制台的字符终端上发出蜂鸣声,但您需要将蜂鸣声输出重定向到:

echo -en "\007" >/dev/tty1

会做你想做的。但它需要一个打开的扬声器和活动的控制台桌面(它运行 X 服务器,也许它不会工作)。

© www.soinside.com 2019 - 2024. All rights reserved.