如何停止多行不应在 Shell 脚本中返回
Posted
技术标签:
【中文标题】如何停止多行不应在 Shell 脚本中返回【英文标题】:How to Stop Mutiple Line should not return in Shell Script 【发布时间】:2022-01-20 08:39:44 【问题描述】:下面是我执行得到多行时的输出命令。
我的问题是我应该想要多行而不是脚本中需要单行
输出命令:- bash script.sh --username USERNAME --password PASSWORD --project "Test Project"
oxNjM5ODA2MTg5fQ.ea82ZkR5afv5uT0m6l8ttutOWCelPlxuyr4iU3VkZyU
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9617 0 9617 0 0 7166 0 --:--:-- 0:00:01 --:--:-- 7160
runId = 8a8094017dbc2780017dc6ea6a3c0780
taskStatus = WAITING
Checking Status....
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9725 0 9725 0 0 7209 0 --:--:-- 0:00:01 --:--:-- 7214
Status = PROCESSING Success Percent = 100.0 Total Tests = 75 Total Failed = 0 Run = 16
Checking Status....
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9725 0 9725 0 0 7155 0 --:--:-- 0:00:01 --:--:-- 7155
Status = PROCESSING Success Percent = 100.0 Total Tests = 75 Total Failed = 0 Run = 16
Checking Status....
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9862 0 9862 0 0 7465 0 --:--:-- 0:00:01 --:--:-- 7465
Status = PROCESSING Success Percent = 93.0 Total Tests = 75 Total Failed = 5 Run = 16
Checking Status....
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9862 0 9862 0 0 7493 0 --:--:-- 0:00:01 --:--:-- 7493
Status = PROCESSING Success Percent = 93.0 Total Tests = 75 Total Failed = 5 Run = 16
Checking Status....
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9886 0 9886 0 0 7517 0 --:--:-- 0:00:01 --:--:-- 7517
Status = COMPLETED Success Percent = 90.0 Total Tests = 75 Total Failed = 7 Run = 16
这是我的 shellscript
#!/bin/bash
# Begin
TEMP=$(getopt -n "$0" -a -l "username:,password:" -- -- "$@")
[ $? -eq 0 ] || exit
eval set -- "$TEMP"
while [ $# -gt 0 ]
do
case "$1" in
--username) TS_USER="$2"; shift;;
--password) TS_PWD="$2"; shift;;
--) shift;;
esac
shift;
done
curl -s -H "Content-Type: application/json" -X POST -d '"username": "'$TS_USER'", "password": "'$TS_PWD'"' https://example.com/login
echo "generated token is:" $token
curl --location --request POST "https://example.com/" --header "Authorization: Bearer "$token""
echo "runId =" $runId
if [ -z "$runId" ]
then
echo "RunId = " "$runId"
echo "Invalid runid"
echo $(curl --location --request POST "https://example.com/" --header "Authorization: Bearer "$token"")
exit 1
fi
taskStatus="WAITING"
echo "taskStatus = " $taskStatus
while [ "$taskStatus" == "WAITING" -o "$taskStatus" == "PROCESSING" ]
do
sleep 5
echo "Checking Status...."
passPercent=$(curl --location --request GET "https://example.com/" --header "Authorization: Bearer "$token"")
taskStatus="$array[0]"
echo "Status =" "$array[0]" " Success Percent =" "$array[1]" " Total Tests =" "$array[2]" " Total Failed =" "$array[3]"
if [ "$taskStatus" == "COMPLETED" ];then
echo "------------------------------------------------"
echo "Run detail link https://example.com$array[7]"
echo "-----------------------------------------------"
echo "Job run successfully completed"
exit 0
fi
done
echo "Task Status = " $taskStatus
exit 1
fi
echo "$(curl --location --request GET "https://example.com/" --header "Authorization: Bearer "$token"")"
exit 1
return 0
只需要单行我需要在上面的脚本中添加的内容,以便它应该只显示一行,即 状态.... 状态 = 已完成成功百分比 = 90.0 总测试 = 75 总失败 = 7 运行 = 16
【问题讨论】:
你在问如何关闭 curl 的进度日志吗? (手册页回答了这个问题)。如果应该只有一行输出,为什么还要多次调用 curl? 是的,只有我需要 然后将前两个curl
s 完全取出,在第三个上使用-s
。或者如果您出于其他原因确实需要前两个,则将-s
添加到所有三个中,但重定向前两个的输出,以便不会向用户显示。
另外,这主要是How do I get curl to not show the progress bar?的重复
明确地说,somecommand
运行一些命令其输出到标准输出。你不需要写echo $(somecommand)
来写它的输出,因为输出是总是写的,除非你主动做一些事情(比如添加>/dev/null
)来关闭它。并且echo $(somecommand)
在I just assigned a variable, but echo $variable
shows something else! 中描述的方式也有问题。
【参考方案1】:
使用 curl 的 -s
或 --silent
参数,您可以确保 curl 在静默或静默模式下运行。请注意,错误消息也会对您隐藏。
man curl
将显示该命令的所有可用选项。
【讨论】:
通过添加 -si 得到以下 3 行检查状态....状态 = 处理成功百分比 = 100.0 总测试 = 75 总失败 = 0 运行 = 17 检查状态....状态 = 处理成功百分比 = 100.0 总测试 = 75 总失败 = 0 运行 = 17 检查状态.... 状态 = 已完成成功百分比 = 90.0 总测试 = 75 总失败 = 7 运行 = 17 正如我所说我只需要显示 1 行 @user17201361,cmets 不保留行尾,因此您的评论并没有告诉我们您还有多少行输出。 如果这是用户所要求的,则该问题应作为How do I get curl to not show the progress bar? 的副本关闭,而不是被回答。请参阅How to Answer 的回答常见问题部分。 @CharlesDuffy 3 我得到的行输出以及关于你在上面发送的链接与我的情况不同,我已经在 curl 中添加了 -s,但我仍然得到 3 行输出 您的代码的哪一部分让您认为它不应该发出三行单独的输出?-s
只是告诉 curl 不要打印额外的状态;当服务器发送换行符时,它不会阻止它打印换行符。以上是关于如何停止多行不应在 Shell 脚本中返回的主要内容,如果未能解决你的问题,请参考以下文章
Shell脚本编程小技巧-如何解决脚本中多行重定向结束符不用对齐到行首