当子 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
我有一个 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