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

Linux 当我通过SSH在远程计算机上运行bash脚本时,如何在本地计算机上发出声音?,linux,bash,memory-management,ssh,Linux,Bash,Memory Management,Ssh,我有一个脚本,当使用太多内存时会发出嘟嘟声。我想将此脚本部署到远程计算机并通过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: f

我有一个脚本,当使用太多内存时会发出嘟嘟声。我想将此脚本部署到远程计算机并通过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
#/bin/bash
#彼得·布莱克
#alarm.sh
最大百分比=94
轨枕=1
频率=1000
持续时间=300
#要启用脚本,请执行以下操作:
#chmod u+x alert.sh
#获取总可用内存:
函数总内存{
echo“可用内存总量:”
TOTAL_MEM=$(grep MemTotal/proc/meminfo | awk'{print$2}')
#另一种方法是:
#total_mem=$(awk'/MemTotal/{print$2}'/proc/meminfo)
echo“------------$TOTAL_MEM------------”
}
#报警功能参数:频率、持续时间
#例如:
#_报警400 200
_警报(){
(\扬声器测试—频率$1—测试正弦)&
pid=$!
\睡眠0.${2}s
\杀戮-9美元
}
功能总可用内存{

total\u available\u mem=$(作为bash,只需打印几次“bell”字符,而不用使用扬声器测试程序…
echo-e“\007\007\007”
即使在远程机器上执行的脚本中,它也会在本地发出声音。频率和音量是不同的问题

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


嗯,有一个非常简单的方法:

ls -l >/dev/dsp
:-)

它将一个目录文本导入声音输出,就像它是一个wav文件一样。它听起来不太好:-),但对于报警来说,它非常棒。它需要内核模块生成
/dev/dsp
设备


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

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

会做你想做的。但它需要一个打开的扬声器和活动控制台桌面(it X服务器运行,可能无法工作).

然后,您必须为您的计算机编写一个服务器,并让远程主机向您的计算机发送一些数据,以便服务器可以处理这些数据并发出嘟嘟声。您可以对脚本中的特定输出消息作出反应,并触发本地计算机上的声音,或者按照ForceBru的建议执行。我可以编写一个在本地计算机上运行的脚本,将SSH发送到远程一个并查询内存?如果您创建一个ssh证书并将其安装在远程计算机上,以授予您的进程特权访问权限,您只需
total\u available\u mem=$(ssh@A链接)即可。您的环境是什么?此命令将在远程客户端发出声音,而不是在服务器上发出声音。
echo -en "\007" >/dev/tty1