红枫醉秋

可怜未温春已半,半生一梦醒尤难。

月份:2018年8月

Windows CMD(BAT)批处理的一些小坑

在处理UDP2RAW/KCPTUN的时候,想把服务器放在NAS虚拟出的下载机(Windows7)上。于是遇到了BAT批处理的一些坑,填坑如下:

1、要加setlocal enabledelayedexpansion一行,否则字符串截取运算不能引用变量。

2、bat的字符串运算似乎不能直接查找指定字符。要一个字一个字的截取判断。实在是个坑。

 

@echo off

setlocal enabledelayedexpansion
set /p domain=请输入要查询ip的域名:
set num=
set c=
ipconfig/flushdns >nul
for /f "delims=" %%i in ('ping %domain%^|findstr %domain%') do (set a=%%i)
:next
if not "%c%"=="[" (
set /a num+=1
set c=!a:~%num%,1!
goto next
)

SET ip=!a:~%num%,-14!
echo %domain%的ip地址是%ip%

 

因为nohup和screen所走过的弯路

在神奇的nohup command >/dev/null 2>&1 &失灵(关闭shell后进程还是会被杀死)之后,只好尝试用screen来实现后台运行的功能…

然而,更神奇的是,在shell中手动执行命令可以用screen的名字来指定screen进程,但是一旦用脚本,就会提示找不到对应的screen 。所以,只好再加一个判断来选择某一个screen的具体pid…折腾了一个上午,代码如下:

#! /bin/bash
screen_name=$"runudp2raw"
spid=$(screen -ls | grep $screen_name)
spid=${spid%.*}
echo $spid
screen -X -S $spid quit
screen -dmS $screen_name
spid=$(screen -ls | grep $screen_name)
spid=${spid%.*}
echo $spid
cmd=$"udp2raw"
screen -x -S $spid -p 0 -X stuff "$cmd"
screen -x -S $spid -p 0 -X stuff $'\n'

Powered by WordPress & Theme by Anders Norén