当子 shell 脚本中的 运行 时,scp 不列出

scp doesn't list then when run in subshell script

我有一个 bash 脚本 my_script 执行:

scp -- 'somehost:*.txt' dest_dir

现在,当我从交互式 shell 会话中 运行 此脚本时,scp 会在复制文件时列出文件。但是当我 运行 第二个脚本时,包含:

exec 5>&1
foo=$(my_script | tee /dev/fd/5) || exit -1

(请参阅 this question 了解动机)- scp 在复制文件时不会列出文件。

这是为什么?除了使用 scp -v?

之外,我还能避免这种情况吗?

Why is that?

scp program checks 如果输出是 tty,如果是,则打印进度。如果输出不是 tty,则不会打印进度信息。

And can I circumvent this other than by using scp -v?

How to trick a command into thinking its output is going to a terminal

具体来说,在 scp 的调用前加上 unbuffer:

可能就足够了
unbuffer scp -- 'somehost:*.txt' dest_dir