编辑文件直到所选端口不会被其他应用程序使用

Edit file until the selected port will be not used by another application

我写了一个简单的脚本,要求用户编辑文件,直到用户进入未使用的端口为止。但它不起作用(

while ! nc -z localhost $port; do
echo port is already used. Please choose another one.; read -p "Press enter to edit configuration file"; nano config.env;
done

$port 是脚本从当前配置文件中获取的环境。 while 循环根本没有开始。 我已经尝试 运行 脚本了!没有!结果是一样的,看起来条件表达式有问题。

为了测试您的场景,我在笔记本电脑上启动了 Apache httpd 服务器。它侦听端口 80。因此 nc -z localhost 80 将以状态码 0 退出。

这是我的脚本:

#!/bin/bash

port=80

while nc -z localhost $port
do
    echo "Port is already used. Please choose another one."
    read -p "Press enter to edit configuration file or CTRL-C to terminate."
    /usr/bin/nano config.env
    wait
    echo ""
done
  • 为了简化,我在脚本中将端口静态设置为 80。您的版本将从 config.env
  • 读取端口
  • 当用户按下回车键时,read 完成,并调用编辑器。
  • 当用户编辑文件时,您希望脚本 wait。所以在编辑器关闭之前,脚本什么都不做。无论如何都没有必要再次检查端口。
  • 当编辑器关闭时,等待完成,另一个循环开始。
  • 我添加了“或 CTRL-C 来终止”来让用户跳出循环和脚本。
  • 为了便于阅读,您应该将命令放在不同的行中。单行上的一长串命令,由 ; 分隔可能会造成混淆,而且毫无用处。马车returns不贵:)