标签: sh

打印 jenkins 凭证 ID

有谁知道如何打印存储在詹金斯中的凭据?下面的脚本抛出:

Unexpected exception caught! groovy.lang.MissingPropertyException: No such property: crd for class: com.test.File
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

服务.groovy

withCredentials([usernamePassword(
    credentialsId: vaultCredentialId, usernameVariable: 'ID', passwordVariable: 'CRED')]){


sh """
    crd=${CRED}
    for chars in `echo $crd | fold -w1`; do echo "value: $chars" ; done
"""
Run Code Online (Sandbox Code Playgroud)

sh jenkins-pipeline

0
推荐指数
1
解决办法
3355
查看次数

如何从 makefile 中的另一个文件加载环境变量?

我想在运行 makefile 命令时设置环境变量,但理想情况下这些变量将存储在另一个文件中。

./生成文件

_init_dev:
    . ./config/dev-env

diff-dev: _init_dev
    cdk diff

deploy-dev: _init_dev
    cdk deploy
Run Code Online (Sandbox Code Playgroud)

./config/dev-env

export HELLO_CDK_DEPLOY_ENVIRONMENT=dev
Run Code Online (Sandbox Code Playgroud)

首先,我尝试使用source加载变量,但是失败并显示以下消息:

make: source: Command not found

我明白这是因为make运行sh而不是bash

然后我尝试.在配置文件前面添加以尝试以这种方式加载变量。

这两种方法都没有奏效。当我运行cdk命令时,我可以从输出中看到环境变量尚未设置。

任何人都可以建议一种让它发挥作用的方法吗?

unix bash makefile environment-variables sh

0
推荐指数
1
解决办法
1163
查看次数

bash:如何从函数返回带有换行符的字符串?

我需要使用函数将以下内容保存在文件中。

[hello]
world
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,但没有一个有效。

#!/bin/bash


create_string() {
  str="[${1}]\n"
  str="${str}world\n"
  echo $str
}

create_string hello >> string.txt
Run Code Online (Sandbox Code Playgroud)

文件是这样的。

[hello]\nworld\n
Run Code Online (Sandbox Code Playgroud)

bash sh

0
推荐指数
1
解决办法
658
查看次数

如何在 CodeBuild 中使用短提交 SHA 标记图像

当主分支中的新提交触发时,我试图从 CodeBuild 构建中获取提交的短 git SHA。

我知道其中CODEBUILD_RESOLVED_SOURCE_VERSION包含完整的提交 SHA。我想在将输出图像推送到 ECR 之前缩小该值以标记输出图像。

我尝试过buildspec.yml

version: 0.2

phases:
  pre_build:
    commands:
      ...
      - COMMIT_ID=${CODEBUILD_RESOLVED_SOURCE_VERSION:0:8}
      ...
  build:
    commands:
      ...
      - echo Tagging image with commit id $COMMIT_ID
      - docker tag $REPOSITORY_URI/$IMAGE_REPO_NAME:latest $REPOSITORY_URI/$IMAGE_REPO_NAME:$COMMIT_ID
      ...
  post_build:
    commands:
      ...
      - docker push $REPOSITORY_URI/$IMAGE_REPO_NAME:$COMMIT_ID
Run Code Online (Sandbox Code Playgroud)

但我得到:

[Container] 2022/07/07 11:30:05 Running command COMMIT_ID=${CODEBUILD_RESOLVED_SOURCE_VERSION:0:8}
/codebuild/output/tmp/script.sh: 4: Bad substitution
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

git sh amazon-ecr aws-codebuild

0
推荐指数
1
解决办法
1305
查看次数

Shell 脚本检查目录是否包含超过 4 个文件

我需要一个 shell 脚本来检查目录是否包含超过 4 个文件并更改目录所有者。

下面的脚本仅检查目录是否为空,如果目录为空,则将目录所有者更改为 lohith ,如果目录不为空,则将所有者更改为 satha 。

这里需要添加到脚本中以检查目录是否包含超过 4 个文件,需要将所有者更改为 satha,如果目录包含少于 4 个文件或者目录为空,则需要将所有者更改为 lohith。

#!/bin/bash
FILE=""
DIR="/home/ec2-user/test1"
# init
# look for empty dir 
if [ "$(ls -A $DIR)" ]; then
     chown satha $DIR
else
     chown lohith $DIR
fi
Run Code Online (Sandbox Code Playgroud)

bash shell sh

0
推荐指数
1
解决办法
507
查看次数

为什么 bash 脚本在没有 .sh 的情况下运行?

我有一个 bash 脚本,错误地以 .py 命名(例如 test.py)。该脚本运行没有任何问题。(./test.py) 如果它可能有用,这里是来自 ls -l 命令的信息:-rwxr-xr-x。

我的问题是为什么脚本(test.py)执行时没有被正确命名为(test.sh),这可能会导致问题吗?

脚本内容如下所示:

#!/bin/bash


export SINGULARITYENV_LC_ALL=C.UTF-8
export SINGULARITYENV_LANG=C.UTF-8

CONTAINER=/mnt/pynet-pytorch-181.sif

# Pretrain
DATA=/mnt/Dataset/
EXPERIMENT_NAME=./2022_12_16/


srun -c 4 --gres=gpu:a6000:1 --mem=32G singularity exec -B /mnt:/mnt/ \
--nv $CONTAINER \
python train.py --dataroot $DATA \
               --device "cuda" \
               --pre_denoising False \
               --experiment_name $EXPERIMENT_NAME \
               --epochs 200
Run Code Online (Sandbox Code Playgroud)

我尝试再次运行另一个具有相同命名问题 *.py 的 bash 脚本,它执行时没有问题。我不明白为什么它会起作用。

linux bash sh

0
推荐指数
1
解决办法
64
查看次数

如何在 bash 中编写包含按第一个数字对齐的正数和负数的列

在处理包含正数和负数列的数据文件时,我想出了使用column -t. 但是,这会将 -ve 符号视为字段来对齐列,这看起来不太好。有没有什么方法(即使在内部column)以不同的方式对待它?

编辑: 实际情况不需要具有相同数量的数字,并且许多数字包含许多列。一个玩具示例如下:

猫输入.txt

-1.5647453E-09 1.33356715E-09
1.3224229E-09 4.8350685E-09
1.7098133E-09 -2.8287697E-10
-3.3301262E-09 -1.8597501E-08
Run Code Online (Sandbox Code Playgroud)

column -t

-1.5647453E-09  1.33356715E-09
1.3224229E-09   4.8350685E-09
1.7098133E-09   -2.8287697E-10
-3.3301262E-09  -1.8597501E-08
Run Code Online (Sandbox Code Playgroud)

预期的:

-1.5647453E-09   1.33356715E-09
 1.3224229E-09   4.8350685E-09
 1.7098133E-09  -2.8287697E-10
-3.3301262E-09  -1.8597501E-08 
Run Code Online (Sandbox Code Playgroud)

基本上,我想将每列从左侧(与第一个数字)对齐,以便它看起来如上。请注意,column -t它从左侧对齐,但也带有 -ve 符号,这是不需要的。

sorting bash awk sed sh

0
推荐指数
1
解决办法
190
查看次数

zsh 如何处理多个重定向?

例如,在 中zsh,您可以执行以下操作:

% cat < file1 < file2
Run Code Online (Sandbox Code Playgroud)

你会看到两者。如何zsh在对程序透明的同时做到这一点cat

cat程序在 POSIX 系统上读取STDIN_FILENO并打印STDOUT_FILENO,那么一个文件描述符如何指向多个打开的文件描述呢?在 中sh,仅执行最后一个重定向(最右侧)。

c operating-system zsh file sh

0
推荐指数
1
解决办法
160
查看次数

字符串变量插值

我编写了这个脚本:

for i in `seq 1 $1`; do
        timestamp=$(uuidgen)
        cat $2.json | jq '.transactionId = "$timestamp"' > $3/$timestamp.json
done
Run Code Online (Sandbox Code Playgroud)

我的问题是,jq '.transactionId = "$timestamp"'因为文件的内容是:

{
  "transactionId": "$timestamp"
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

bash sh jq

-1
推荐指数
1
解决办法
98
查看次数

在外壳中,如果大于100MB,如何删除文件,否则移动

使用shell命令执行以下操作的最简单方法是什么?

伪代码: rm abc if >100MB else mv abc /tmp

abc可以是一个文件或一个目录的名称。

我想拥有一个别名,如果在文件或目录上运行,则将其删除(如果其大小大于100MB),否则将其移至另一个目录。我知道我可以用全部功能完成类似的工作,但是必须有一个光滑的单面纸可以完成相同的工作。

unix linux bash shell sh

-1
推荐指数
1
解决办法
90
查看次数