ruby-on-rails Bash -打印变量时出现奇怪白色错误

jgwigjjp  于 2023-02-10  发布在  Ruby
关注(0)|答案(1)|浏览(106)

我正在尝试使用bash脚本创建一个私有的访问令牌,使用的是rails-terminal for GitLab。

#!/bin/bash

password=$(microk8s kubectl exec -it gitlab-6f6ff575cb-zvcph -n project-utility -- /bin/sh -c 'gitlab-rails runner "puts SecureRandom.hex(4)"')
user_token=$(microk8s kubectl exec -it gitlab-6f6ff575cb-zvcph -n project-utility -- /bin/sh -c 'gitlab-rails runner "user = User.new(name: \"Project\", username: \"System\", email: \"system@project.com\", password: \"'"$password"'\"); user.save!; token = user.personal_access_tokens.create(name: \"System\", scopes: [:api]); puts token.token"')

echo "Generated password: $password"
echo "Generated user token: $user_token"

现在,除了user_token的响应中有一个警告之外,此脚本可以正确执行所有操作。响应如下所示:

Generated password: 9f9857cc
Generated user token: /opt/gitlab/embedded/lib/ruby/gems/2.7.0/gems/railties-6.1.6.1/lib/rails/commands/runner/runn in middle of line, treated as a mere space
glpat-VuHcqsoK8XkAMq1fhVTS

现在,我尝试使用以下代码剥离空白:

user_token="${user_token##* }"
user_token="${user_token%% *}"
echo "Generated user token: $user_token"

这将删除警告,但在输出中打印一个随机的space字:

Generated password: 8465390c
Generated user token: space
glpat-Rzoz_Zn8xJ_9kVt1dVek

我还尝试了下面的行来去除空格:

user_token="$(echo "$user_token" | tr -d '[:space:]')"
echo "Generated user token: $user_token"

但这会再次返回警告,但句子中没有任何空格...
我试图得到的输出当然是这样的:

Generated password: 8465390c
Generated user token: glpat-Rzoz_Zn8xJ_9kVt1dVek

我哪里做错了?

dxxyhpgq

dxxyhpgq1#

您的问题是"${user_token##* }",这忽略了一个事实,即换行符可以包含在输出中(事实就是如此),因此,您只需要将space<newline>glpat-...之前的所有内容都添加进去,要解决这个问题,一个选项是使用cut

user_token=$(cut -d $'\n' -f 2 <<< "$user_token")
user_token="${user_token%% *}"
echo "Generated user token: $user_token"

当然,这是假设打印的文件路径没有任何换行符,但我不认为这是一个实际问题。
一个更好的解决方案是修改你已经在做的事情:

user_token="${user_token##*$'\n'}"
user_token="${user_token##* }"
user_token="${user_token%% *}"
echo "Generated user token: $user_token"

相关问题