我正在尝试使用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
我哪里做错了?
1条答案
按热度按时间dxxyhpgq1#
您的问题是
"${user_token##* }"
,这忽略了一个事实,即换行符可以包含在输出中(事实就是如此),因此,您只需要将space<newline>glpat-...
之前的所有内容都添加进去,要解决这个问题,一个选项是使用cut
:当然,这是假设打印的文件路径没有任何换行符,但我不认为这是一个实际问题。
一个更好的解决方案是修改你已经在做的事情: