【问题标题】:Bash output disappearsBash 输出消失
【发布时间】:2018-05-24 03:15:47
【问题描述】:

运行以下 bash 脚本时...

#!/bin/bash

ATTEMPTS=3
DEST_DIR="/opt/satnet"
ATTEMPTS=3
URL="https://github.com/google/snappy/tarball/master"

CURL_OPTS='-sIkL'
SED_REGEX='/filename=/!d;s/.*filename=(.*)$/\1/'
FILENAME="$( curl $CURL_OPTS $URL | sed -r $SED_REGEX )"
DEST_FILE="$DEST_DIR/$FILENAME"

printf "\t* URL = %s\n" $URL
printf "\t* Remote tarball filename = %s\n" $FILENAME


WGET_BIN='wget'
WGET_OPTS_1="-t $ATTEMPTS -c -O $DEST_FILE"
WGET_OPTS="-t $ATTEMPTS -c -O $DEST_FILE $URL"

printf "\t* wget opts 1 = %s\n" "$WGET_OPTS_1"
printf "\t* wget opts = %s\n" "$WGET_OPTS"

echo "    * wget opts 1 = $WGET_OPTS_1"
echo "    * wget opts = $WGET_OPTS"

... 第二个变量的输出应该包括第一个变量的输出加上 URL;但是,它只显示 URL,甚至不显示 URL 之前的字符串部分:

* URL = https://github.com/google/snappy/tarball/master
* Remote tarball filename = google-snappy-1.1.7-0-gb02bfa7.tar.gz
* wget opts 1 = -t 3 -c -O /opt/satnet/google-snappy-1.1.7-0-gb02bfa7.tar.gz
https://github.com/google/snappy/tarball/mastergle-snappy-1.1.7-0-gb02bfa7.tar.gz
* wget opts 1 = -t 3 -c -O /opt/satnet/google-snappy-1.1.7-0-gb02bfa7.tar.gz
https://github.com/google/snappy/tarball/mastersnappy-1.1.7-0-gb02bfa7.tar.gz

就好像,由于某种原因,添加 URL “删除”了字符串的初始部分。

我做错了什么?

【问题讨论】:

  • 您很可能会遇到使用 DOS 行尾包含 回车 的 curl 问题,这会将光标返回到行首,从而导致第一行被覆盖下一个。 (我怀疑你在$FILENAME 中捕获了回车)
  • 尝试从curl的结果中删除\r字符:FILENAME="$( curl $CURL_OPTS $URL | sed -r $SED_REGEX | tr -d '\r' )"
  • @janos 成功了!请发表您的评论作为问题的答案!

标签: linux bash shell curl wget


【解决方案1】:

老实说,我无法重现您问题中的奇怪显示错误。我在 Linux shell 中运行了相同的代码,它显示得很好。 但我可以确认发布的代码中的curl 请求输出结果带有 DOS 行结尾, 最终出现在 FILENAME 变量的内容中, 这反过来可能会导致您遇到的奇怪输出。

删除有问题的\r 字符的简单方法是使用tr:

FILENAME="$( curl $CURL_OPTS $URL | sed -r $SED_REGEX | tr -d '\r' )"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多