我创建了bash scirpt,它接受了我的jvm实例的jstat指标!
这是输出示例:
demo.server1.sms.jstat.eden 24.34 0
demo.server1.lcms.jstat.eden 54.92 0
demo.server1.lms.jstat.eden 89.49 0
demo.server1.tms.jstat.eden 86.05 0
Run Code Online (Sandbox Code Playgroud)
但当Sensu-client运行此脚本时,它会返回
Could not attach to 8584
Could not attach to 8588
Could not attach to 17141
Could not attach to 8628
demo.server1.sms.jstat.eden 0
demo.server1.lcms.jstat.eden 0
demo.server1.lms.jstat.eden 0
demo.server1.tms.jstat.eden 0
Run Code Online (Sandbox Code Playgroud)
以下是check_cron.json的示例
{
"checks": {
"jstat_metrics": {
"type": "metric",
"handlers": ["graphite"],
"command": "/etc/sensu/plugins/jstat-metrics.sh",
"interval": 5,
"subscribers": [ "webservers" ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
还有我的bash脚本
jvm_list=("sms:$sms" "lcms:$lcms" "lms:$lms" "tms:$tms" "ums:$ums")
for jvm_instance in ${jvm_list[@]}; do
project=${jvm_instance%%:*}
pid=${jvm_instance#*:}
if [ …Run Code Online (Sandbox Code Playgroud) 我有一个脚本(来自供应商......用于屏蔽密码),它遍历一系列用户输入,并根据输入生成一些输出.我希望能够在其周围包装另一个脚本,该脚本从文本文件中提供输入,然后捕获输出以供以后使用.有没有这方面的例子?
更新:我已经做了一些挖掘,结果发现shell脚本正在启动一个请求用户输入的java进程.xargs和<,>,| 似乎没有为此工作.
在目录~/temp/a/foo/和~/temp/b/foo foo/我有一个名为一些文件bar1,bar2,bar bar1,bar bar2,等.
我正在尝试编写一行Bash,将包含"foo"的目录中的所有这些文件作为名称的最后一部分复制到相应"foo"文件夹上方的文件夹中.
只要文件名中没有空格,这是一项简单的任务,但在处理foo foo目录时,以下两个命令会失败:
for dir in `find . -type d -name '*foo'` ; do cp $dir/* "$(echo $dir|sed 's_foo__g')" ; done
Run Code Online (Sandbox Code Playgroud)
(该cp命令无法将最后foo一个"foo foo"视为同一目录名的一部分.)
for dir in `find . -type d -name '*foo'` ; do cp "$dir/*" "$(echo $dir|sed 's_foo__g')" ; done
Run Code Online (Sandbox Code Playgroud)
("$dir/*"未扩展.)
喜欢尝试更换$dir/*与"$(echo $dir/*)"已经甚至不太成功.
是否有一种简单的方法可以扩展$dir/*以便cp理解?
我在bash中运行此查询:
mkfifo resp
while true; do
sudo nc -l -p 80 < resp |
(cat & echo -e "HTTP/1.1 200 OK\r\n\r\nhello :)" > resp) ||
break;
done
Run Code Online (Sandbox Code Playgroud)
然而,当我Ctrl+C,没有任何反应,终端锁定.
为什么?我究竟做错了什么?
我试图在一个不区分大小写的while语句中编写一个比较.基本上,我只是想缩短以下内容,对用户提出是或否问题提示......
while[ $yn == "y" | $yn == "Y" | $yn == "Yes" | $yn == "yes" ] ; do
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我通过ssh阅读远程命令中的单引号转义解决方案.但是任何工作都有风险.
我尝试着
ssh root@server "ps uax|grep bac | grep -v grep | awk '{ print $2 }' > /tmp/back.tmp"
Run Code Online (Sandbox Code Playgroud)
不要工作awk
ssh root@server "ps uax|grep bac | grep -v grep | awk \'{ print $2 }\' > /tmp/back.tmp"
....
awk: '{
awk: ^ caracter ''' inválido en la expresión
Run Code Online (Sandbox Code Playgroud)
并尝试在命令上放置单个配额但也不起作用.
Aprecite帮助
我正在处理输入(例如ls -la --color之类的源),并在文本的某些部分加下划线。我不会逐个字符地处理这些输入,而是使用许多正则表达式,这使得跟踪我正在影响的子字符串是否已经是彩色还是粗体变得相当困难。如果我有一个红色的文本块,并且想在其中加下划线,则可以执行以下操作:
s/(123)/\033[4m\1\033[0m/g
Run Code Online (Sandbox Code Playgroud)
(我的表达式要复杂得多。实际上,匹配项是自己提取,处理,进一步分解和分析的。这不能通过更改我在此处给出的表达式来完成。)
上面的代码将用[UNDERLINE_START] 123 [FORMAT_RESET]替换所有出现的123。不幸的是,重置还关闭了文本的颜色。如果仅在要禁用的所有功能时都关闭下划线,那将为我省去很多麻烦,但我敢肯定,没有办法做到这一点。谁能告诉我我错了吗?
编辑:我可以通过询问以下问题来简化问题:如果我想关闭下划线,是否可以在不影响当前文本颜色的情况下做到这一点,因为该颜色可以在我的脚本甚至开始执行之前就已经设置好了,而且我没有一种检测该颜色是什么的方法?
我想决定是否总是省略用Bash [[测试出现的变量的引号.我解释该man页面说允许这样做而不会丢失正确性.
我设计了这种简单的"测试"来验证我的想法和"预期的行为",但它可能完全没有任何证据,请看一下:
x='1 == 2 &&'; if [[ $x == '1 == 2 &&' ]]; then echo yes; else echo no; fi
Run Code Online (Sandbox Code Playgroud)
注意我不是这样写的:
x='1 == 2 &&'; if [[ "$x" == '1 == 2 &&' ]]; then echo yes; else echo no; fi
Run Code Online (Sandbox Code Playgroud)
到目前为止,这一直是我的风格,为了一致性,如果没有别的.
被安全地转我的编码约定,总是忽略了中出现的变量报价[[测试?
我正在努力学习Bash,我正努力做到这样做,养成良好的习惯,良好的风格和正确性.
在我的script.sh:
aa=$@
bb=$*
echo $aa
echo $bb
Run Code Online (Sandbox Code Playgroud)
运行时:
source script.sh a b c d e f g
Run Code Online (Sandbox Code Playgroud)
我明白了:
a b c d e f g
a b c d e f g
Run Code Online (Sandbox Code Playgroud)
$@和之间有什么区别$*?
我正在尝试使用电子邮件使工作的某些部分自动化。使用mailx和bash是否已有可用的方法来提取邮件正文?