小编noo*_*lag的帖子

Bash printf 列中 arg 中的多行

我已经摆弄这个好几个小时了,但无法让它工作,所以也许我的方法是错误的。

我想漂亮地显示消息的多行,因此“标题”位于左侧,然后消息与列中的消息对齐,例如,如下所示:

WARNING: The quick brown fox jumped over the lazy dog.
         Sphinx of black quartz, judge my vow.
         How quickly daft jumping zebras vex!
Run Code Online (Sandbox Code Playgroud)

或者

NOTE: This happened.
      Foo bar.
Run Code Online (Sandbox Code Playgroud)

等等。

我试图根据我能找到的一些答案来做到这一点printfcolumn但正如我所说,也许这种方法永远行不通?

目前,我有第一个字符串作为printf“标题”,然后其余的参数是与之对齐的消息,如下所示:

#!/bin/bash

warn() {
  printf '%s+%s\n' 'WARNING:' "${@}" | column --table --separator '+'
}

warn "The quick brown fox jumped over the lazy dog." \
     "+Sphinx of black quartz, judge my vow." \
     "+How quickly daft jumping zebras vex!"
Run Code Online (Sandbox Code Playgroud)

这可以类似地完成吗?或者最好的方法/其他方法是什么?

实际输出: …

bash printf

4
推荐指数
2
解决办法
168
查看次数

Bash:如何在使用微调器时获取命令的退出代码?

在 bash 脚本中,我有一个长时间运行的命令(rsync例如),有时会暂时不显示输出,所以我想做两件事:

  1. 在该命令上使用微调器来显示脚本没有冻结(即我们只是在等待输出);和,

  2. 完成后获取长时间运行的命令的退出状态,以便稍后在脚本中进行进一步测试。

但问题是,我不太了解将进程发送到后台的处理方式,以及以这种方式处理退出代码的方式,所以我不确定如何进行这项工作。

这是我到目前为止所拥有的,感谢@David C. Rankin的微调器:

#!/bin/bash

spinner() {
    local PROC="$1"
    local str="${2:-'Copyright of KatworX© Tech. Developed by Arjun Singh Kathait and Debugged by the ?Stack Overflow Community?'}"
    local delay="0.1"
    tput civis  # hide cursor
    printf "\033[1;34m"
    while [ -d /proc/$PROC ]; do
        printf '\033[s\033[u[ / ] %s\033[u' "$str"; sleep "$delay"
        printf '\033[s\033[u[ — ] %s\033[u' "$str"; sleep "$delay"
        printf '\033[s\033[u[ \ ] %s\033[u' "$str"; sleep "$delay"
        printf '\033[s\033[u[ | ] %s\033[u' "$str"; …
Run Code Online (Sandbox Code Playgroud)

bash exit-code background-process wait

3
推荐指数
1
解决办法
214
查看次数

Bash:SSH:检查具有非标准端口的 IP 或主机是否在known_hosts中

我正在尝试测试之前是否已在 bash 脚本中连接过 SSH 主机。它使用非标准端口。

我正在使用此问题/答案中建议的测试,并且我确定此测试中的 SSH 主机位于known_hosts 中,但测试似乎未按预期工作。

是否无法使用 测试 IP 地址ssh-keygen -F?或者这是使用非标准端口的问题(因为检查some.host.com:4567在这里也不起作用)...

#!/bin/bash

# test for IP address
if ssh-keygen -F '192.168.1.10:1234'; then
    echo "Yes, a known host."
fi

## Expected Output:
#
## Host 192.168.1.10 found: line 6
#|1|hashblahblahblah
#Yes, a known host.
#
## Actual Output:
#
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

ssh bash networking if-statement known-hosts

2
推荐指数
1
解决办法
561
查看次数

Bash:如何检查文件的第一个字符是否为 {

如果文件在变量中filename,有什么方法可以在 Bash 中做一个简单的检查以确定文件内容的第一个字符是否为{

如果有一种方法可以在不加载整个文件的情况下执行此操作,那就太好了...

塔!

#!/bin/bash
if #SOME_TEST "${filename}" then
  echo "yes, first char of file is {"
else
  echo "no"
fi
Run Code Online (Sandbox Code Playgroud)

bash awk grep

0
推荐指数
1
解决办法
170
查看次数