后台运行时删除 bash 中的显示 pid
Remove display pid in bash when runing background
如果我们 运行 在后台处理,我们会看到进程 pid 和输出:
# echo cho &
cho
19078
是否可以制作:
# echo cho &
cho
为什么我需要这个?
我想为一些没有 nmap
或 arp-scan
.
等实用程序的 PC 编写仅具有 ping 功能的简单内联 LAN 扫描程序
for ip in 192.168.1.{1..254}; do (ping -c 1 -t 1 $ip > /dev/null && echo ">>> ${ip} is up"; ) & done
它可以工作,但 PID 会破坏输出。
我只是 运行 for
循环本身作为后台的单个作业。也不需要使用括号来 运行 subshell 中的任何命令(使用 Bash,使用 &
控制运算符自动创建一个 subshell 到运行 命令)。循环中分叉的进程越少,它就会越快 运行.
for ip in 192.168.1.{1..254}; do ping -c 1 -t 1 $ip > /dev/null &&
echo ">>> ${ip} is up"; done &
如果您不想 任何 作业控制反馈打印到屏幕上,您可以将后台循环括在括号中,以便它 运行s 在另一个亚shell级:
( for ip in 192.168.1.{1..254}; do ping -c 1 -t 1 $ip > /dev/null &&
echo ">>> ${ip} is up"; done & )
更好的解决方案 是将 echo
语句的输出重定向到一个文件并保留作业控制输出,以便 shell 可以循环结束时通知您。您可以继续使用 shell,避免终端因后台循环 运行ning 打印的输出而变得混乱。
for ip in 192.168.1.{1..254}; do ping -c 1 -t 1 $ip > /dev/null
&& echo ">>> ${ip} is up"; done > hosts_up &
注意: 上面的命令可以运行 一行,但我在这里使用两行以避免水平滚动(&&
在最后一行表示命令的其余部分在下一行继续。
(echo cho &)
在循环中:
for ip in 192.168.23.{1..254}; do (ping -c 1 -t 1 $ip > /dev/null && echo ">>> ${ip} is up" &) done
如果我们 运行 在后台处理,我们会看到进程 pid 和输出:
# echo cho &
cho
19078
是否可以制作:
# echo cho &
cho
为什么我需要这个?
我想为一些没有 nmap
或 arp-scan
.
for ip in 192.168.1.{1..254}; do (ping -c 1 -t 1 $ip > /dev/null && echo ">>> ${ip} is up"; ) & done
它可以工作,但 PID 会破坏输出。
我只是 运行 for
循环本身作为后台的单个作业。也不需要使用括号来 运行 subshell 中的任何命令(使用 Bash,使用 &
控制运算符自动创建一个 subshell 到运行 命令)。循环中分叉的进程越少,它就会越快 运行.
for ip in 192.168.1.{1..254}; do ping -c 1 -t 1 $ip > /dev/null &&
echo ">>> ${ip} is up"; done &
如果您不想 任何 作业控制反馈打印到屏幕上,您可以将后台循环括在括号中,以便它 运行s 在另一个亚shell级:
( for ip in 192.168.1.{1..254}; do ping -c 1 -t 1 $ip > /dev/null &&
echo ">>> ${ip} is up"; done & )
更好的解决方案 是将 echo
语句的输出重定向到一个文件并保留作业控制输出,以便 shell 可以循环结束时通知您。您可以继续使用 shell,避免终端因后台循环 运行ning 打印的输出而变得混乱。
for ip in 192.168.1.{1..254}; do ping -c 1 -t 1 $ip > /dev/null
&& echo ">>> ${ip} is up"; done > hosts_up &
注意: 上面的命令可以运行 一行,但我在这里使用两行以避免水平滚动(&&
在最后一行表示命令的其余部分在下一行继续。
(echo cho &)
在循环中:
for ip in 192.168.23.{1..254}; do (ping -c 1 -t 1 $ip > /dev/null && echo ">>> ${ip} is up" &) done