&1 -6ren">
gpt4 book ai didi

Bash - 将值传递给控制台和变量/文件

转载 作者:行者123 更新时间:2023-11-29 09:27:46 25 4
gpt4 key购买 nike

我准备了一个带有函数 logMETHOD 的简单记录器:

function logMETHOD {
exec 5>&1
local log

log="$( "$@" 2>&1 | tee /dev/fd/5; echo ${PIPESTATUS[0]}>/tmp/ssg_retval )"
local retVal=$(</tmp/ssg_retval)
rm -f /tmp/ssg_retval

_LOG_SSG+=$log$'\n'
return $retVal
}

太棒了。它将传递方法的输出放入控制台(通过 /dev/fd/5)和变量 log(通过 /dev/fd/1) 同时。它还返回由传递的方法返回的值。例如。

logMETHOD scp test.txt ala@host:/direcotry

它可以工作,但不幸的是我不能使用它,因为我无法访问我需要使用的服务器上的 /dev/fd/5。 “权限被拒绝”。

我尝试使用临时文件而不是文件描述符,但它会破坏动态输出,如 scp 进度条。

有没有什么方法可以不使用文件描述符来实现这个功能?

最佳答案

您似乎有权使用 &5 但无权使用 /dev/fd/5。您可以尝试通过运行 ls -l/dev/fd/5 并将其与您的脚本在其下运行的用户+组进行比较来追查原因。不过,尝试替换可能更简单:

tee /dev/fd/5;

与:

tee >(cat >&5)

关于Bash - 将值传递给控制台和变量/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32579102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com