小编Ita*_*not的帖子

Groovy:定义没有“def”的变量与使用锚定有什么区别?

我现在正在学习 Groovy,遇到了一些我不明白的事情,希望您能够提供一些帮助。

关于以下示例:

import groovy.transform.Field
  @Field List awe = [1, 2, 3]
  def awesum() { awe.sum() }
  assert awesum() == 6
Run Code Online (Sandbox Code Playgroud)

我知道这种锚定允许我将 awe 变量的范围从在脚本的方法级别运行更改为脚本的类级别。

但后来我想到了使用 def 定义变量与不使用 def 定义变量之间的区别,例如:

def var = "foo"
Run Code Online (Sandbox Code Playgroud)

var = "foo"
Run Code Online (Sandbox Code Playgroud)

据我了解,这两个示例之间的差异是范围的差异。当我在 Groovy 脚本中为没有“def”或其他类型的变量分配值时,它会添加到“绑定”(脚本的全局变量)中。这意味着可以从脚本中的所有函数访问它。

因此,考虑到“@Field”和不使用“def”定义变量并遵循这一思路,我将示例代码更改为:

import groovy.transform.Field
  awe = [1, 2, 3]
  def awesum() { awe.sum() }
  assert awesum() == 6
Run Code Online (Sandbox Code Playgroud)

它有效。

所以我的问题是为什么要使用锚定?如果您可以通过定义不带“def”的变量来实现相同的目标?

groovy scope

5
推荐指数
1
解决办法
3118
查看次数

Jenkins:我怎么知道自动进程或用户是否触发了构建?

Jenkins中是否有一个环境变量告诉我构建是手动运行还是轮询自动触发?

如果自动触发,我的管道就像魅力一样,但如果手动运行......它总是失败,所以我想我要编辑管道来检查构建是如何被触发的.

groovy jenkins jenkins-pipeline

5
推荐指数
1
解决办法
2979
查看次数

如何将 jq 与 'select(startswith("$variable"))' 一起使用?

我用来jq解析 AWS cli 的一些输出。

我正在尝试使用'select(startswith("$variable") )',但由于某种原因它不起作用,即使当我使用变量的值时它也可以正常工作。

例子:

itai@MacBook-Pro ~/src/Scripts - $ echo $App
Analytics
itai@MacBook-Pro ~/src/Scripts - $ aws cloudformation describe-stacks --stack-name $StackName --region $region | jq -r '.Stacks[].Outputs[].OutputKey | select(startswith("Analytics") )'
AnalyticsAutoScalingGroup
itai@MacBook-Pro ~/src/Scripts - $ aws cloudformation describe-stacks --stack-name $StackName --region $region | jq -r '.Stacks[].Outputs[].OutputKey | select(startswith("$App") )'
itai@MacBook-Pro ~/src/Scripts - $
Run Code Online (Sandbox Code Playgroud)

我知道我可以像这样使用 grep :

aws cloudformation describe-stacks --stack-name $StackName --region $region | jq -r '.Stacks[].Outputs[].OutputKey' | grep $App
Run Code Online (Sandbox Code Playgroud)

但我更喜欢在命令中始终使用 jq 。

我做错了还是根本不可能?

aws-cli jq

5
推荐指数
1
解决办法
4895
查看次数

Bash:如何使用bash减去两个时间字符串?

我创建了下一个脚本以找到锁定文件的年龄:

#!/bin/bash
now=`date +"%T"`
lock="aggregator.lock"
find . -name $lock -type f
if [ $? != 0 ];
        then
        exit
else
ls -ltrh $lock 2&>/dev/null
fi
if [ $? != 0 ];
        then
        locktime=`ls -ltrh aggregator.lock |awk -F" " '{print $7}'`
else
echo "File not found"
fi
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  • 输出ls -ltrh aggregator.lock |awk -F" " '{print $7}' 给我时间格式为HH:MM而不是HH:MM:SS,输出date +"%T"给出时间格式为HH:MM:SS(根据需要),那么如何获取文件的修改时间几秒钟?
  • 我不知道如何在时间之间减去...我想做的事情就是$now - $locktime为了获得两个变量之间的秒增量,怎么做呢?

编辑:脚本的含义是找到锁文件存在多长时间...这是脚本:

device0="/home/build/aggregator/scripts/aggregator.lock"
if [ -e "$device0" ]
then
echo process is allready running
else

touch …
Run Code Online (Sandbox Code Playgroud)

bash shell

4
推荐指数
1
解决办法
3060
查看次数

AWS CloudFormation:如何输出机器的PublicIP?

我写了一个CloudFormation模板,它创建了一个linux docker主机.

我想在"输出"部分下显示机器的PublicIP.

这是模板的相关部分:

"Outputs" : {
    "ServerAddress" : {
      "Value" : { "Fn::GetAtt" : [ "Server", "PublicDnsName" ] },
      "Description" : "Server Domain Name"
    },
    "SecurityGroup" : {
      "Value" : { "Fn::GetAtt" : [ "ServerSecurityGroup", "GroupId" ] },
      "Description" : "Server Security Group Id"
    },
    "PublicIp" : {
      "Value" : { "Fn::GetAtt" : [ "ServerPublicIp", "PublicIp" ]},
      "Description" : "Server's PublicIp Address"
    },
  }
Run Code Online (Sandbox Code Playgroud)

我在官方AWS文档中读到了关于使用"Fn :: GetAtt"并尝试在我的模板中实现它,但是当我尝试创建堆栈时,我收到以下错误:

Error
Template validation error: Template error: instance of Fn::GetAtt references …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation

4
推荐指数
2
解决办法
4979
查看次数

Python - 我正在尝试获取pwd的输出,而是获得退出状态

我正在尝试获得以下输出pwd:

#!python
import os
pwd = os.system("pwd")
print (pwd)
Run Code Online (Sandbox Code Playgroud)

它打印0,这是成功的退出状态而不是路径.我怎样才能获得这条路?

python

3
推荐指数
1
解决办法
3486
查看次数

如何使用bash脚本将多行粘贴到文件中?

我正在编写一个脚本,它将使用正确的设置自动配置NIS客户端.我正在尝试设置/etc/nsswitch.conf文件,我想用我的设置覆盖已存在的任何内容.现在我的问题是,我该怎么做?如何直接从脚本中将大约20行设置粘贴到客户端的nsswitch.conf文件中?我知道我可以这样做:

echo "line 1" > /etc/nsswitch.conf
echo "line 2" >> /etc/nsswitch.conf
Run Code Online (Sandbox Code Playgroud)

但这是一种难看的方式,我希望有更好的方法来实现这一目标

bash nis bind

3
推荐指数
1
解决办法
2207
查看次数

Bash:如何区分符号字符和变量名称?

我在脚本中有这个部分:

cat <<EOF >> /etc/httpd/vhosts/$site$dom.conf
<VirtualHost *:80>
   ServerName  $site$dom
   ServerAlias  www.$site$dom
   DocumentRoot /site/http/travel/itn
   CustomLog logs/access_$site_log combined
   DirectoryIndex default.php index.php index.html index.phtml index.cgi index.htm
   ScriptAlias /awstats/ /usr/local/awstats/wwwroot/cgi-bin/
   <Directory /site/http/travel/itn >
      AllowOverride All
   </Directory>
</VirtualHost>
EOF
Run Code Online (Sandbox Code Playgroud)

在行中:CustomLog logs/access_$site_log combined 似乎解释器认为_log是"$ site"变量的一部分.$ site变量是一个动态变量.我该如何解决?我试图通过使用逃避"_",_$site\_但它对我不起作用.

bash

3
推荐指数
1
解决办法
79
查看次数

Shell 脚本:使用 test 和 if 语句有什么区别?

有什么区别

[ -e /usr/local/nagios ] && echo yes
Run Code Online (Sandbox Code Playgroud)

if [ -e /usr/local/nagios ]; then echo yes
fi
Run Code Online (Sandbox Code Playgroud)

什么时候适合使用它们中的任何一个?

假设我想测试 Nagios 是从源代码编译还是通过 yum 安装(源代码的默认安装位置是/usr/local/nagios并通过YUM/etc/nagios) - 然后我会知道插件文件夹所在的位置,并且它将允许我从 Nagios 中提取插件服务器到 Nagios 客户端并将它们放在正确的目录中。那么哪种方法最能实现这一目标呢?

提前致谢

testing shell if-statement

3
推荐指数
1
解决办法
1万
查看次数

在docker构建之后.容器没有显示,为什么?

我正在尝试使用log.io构建一个docker容器.如果我手动运行:

docker run -it node:argon -p 28777:28777 -p 28778:28778 -p 8000:80 /bin/bash
Run Code Online (Sandbox Code Playgroud)

并在您在Dockerfile中看到的命令内手动运行,然后一切正常,我可以使用http登录服务.

FROM node:argon

WORKDIR Logz.io/src/

RUN useradd -ms /bin/bash ubuntu

#RUN mkdir /root/.log.io \
#       && touch /root/.log.io/harvester.conf \
#       && touch /root/.log.io/log_server.conf \
#       && touch /root/.log.io/web_server.conf

#RUN chmod g+rwx /root/logzio
RUN apt-get update \
        && apt-get install -y vim net-tools

RUN npm install log.io

RUN /node_modules/log.io/bin/log.io-server &

RUN /node_modules/log.io/bin/log.io-harvester &

EXPOSE 28777
EXPOSE 28778
EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)

但如果我跑:

docker build .
Run Code Online (Sandbox Code Playgroud)

创建容器,一切都安装但是:

  1. 当创建完成并且我运行时 …

docker

3
推荐指数
1
解决办法
6965
查看次数