如何正常在 git 操作的 sh 中随机运行 for 循环?
Posted
技术标签:
【中文标题】如何正常在 git 操作的 sh 中随机运行 for 循环?【英文标题】:How can I randomly run for loop in sh of git action normally? 【发布时间】:2021-12-26 13:52:13 【问题描述】:如何在git action的sh中正常随机运行for循环?
这里有一个每天提交的 github 存储库。
用于 github 操作
下面的yml文件存在。
name: planting-grass
on:
schedule:
- cron: '0 0 * * *'
jobs:
task:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set current date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
- name: Execute commands
run: sh ./task.sh $ steps.date.outputs.date
- name: Commit files
run: |
git config --global user.name "$(git --no-pager log --format=format:'%an' -n 1)"
git config --global user.email "$(git --no-pager log --format=format:'%ae' -n 1)"
git add date.txt
git commit -m $ steps.date.outputs.date
- name: Push changes
uses: ad-m/github-push-action@master
with:
github_token: $ secrets.GITHUB_TOKEN
branch: $ github.ref
这个 yml 运行 task.sh。 task.sh 看起来像这样:
#!/bin/bash
echo "DATE: $1" >> date.txt
一切正常。
但在data.txt中,每天累计一行。
我想在 data.txt 中累积 1 到 100 之间的行。
我可以在哪里编辑以使用上述功能?
然后我尝试了以下方法:
#!/bin/bash
range=100
number=$((RANDOM % range))
while [ "$i" -le "$number" ]; do
echo "DATE: $1" >> date.txt
done
#!/bin/bash
range=100
number=$((RANDOM % range))
i=0
while (( i <= number )); do
echo "DATE: $i" >> date.txt
i=$((i+1))
done
#!/bin/bash
range=100
number=$((RANDOM % range))
for i in $(seq 0 $number); do
echo "DATE: $i" >> date.txt
done
但都失败了。
它输出以下错误消息:
./task.sh: 7: [: Illegal number:
./task.sh: 7: [[: not found
./task.sh: 7: i: not found
我想知道如何运行正常的随机 for 循环。
最好的问候!
编辑)
#!/bin/bash
range=100
number=$((RANDOM % range))
i=0
while (( i <= number )); do
echo "DATE: $i" >> date.txt
i=$((i+1))
done
上面的代码运行良好,但它只运行一次。
与想在 1 到 100 之间随机运行 echo "DATE: $i" >> date.txt
不同,它总是只执行一次。我们该如何解决这个问题?
【问题讨论】:
最后一个应该有效。[[: not found
和 i: not found
-> 你不是在运行 bash,而是在运行 sh。 sh ./task.sh
。重击!= sh。 [: Illegal number:
变量 i
未在第一个代码 sn-p 中设置。
您可以将 run: sh ./task.sh
更改为 run: bash ./task.sh
以使用 bash 运行您的脚本。您的 cron 计划 (0 0 * * *
) 设置为每天运行。您可以将其更改为0,30 * * * *
,每半小时运行一次(但日期将全天相同,除非您包括时间,例如date + '%Y-%m%d_%H:%M:%S'
)。我不确定你的目标是什么。
@dan 请回复答案,而不是评论用运行替换run: sh ./task.sh
:bash ./task.sh
解决了它。非常感谢。
【参考方案1】:
您可以将run: sh ./task.sh
更改为run: bash ./task.sh
以使用bash 运行您的脚本,而不是sh
。
如果你的脚本是可执行的(chmod a+x task.sh
,并提交文件),并且你有正确的 shebang (#!/bin/bash
),你也可以执行run: ./task.sh
。
您的 cron 计划 (0 0 * * *
) 设置为每天运行。如果你想更频繁地运行,你可以改变它。例如0,30 * * * *
将每半小时运行一次(除非您包括时间,否则日期将全天相同,例如date + '%Y-%m%d_%H:%M:%S'
)。
【讨论】:
以上是关于如何正常在 git 操作的 sh 中随机运行 for 循环?的主要内容,如果未能解决你的问题,请参考以下文章