Bash - 将值传递给控制台和 variable/file
Bash - Passing value to both console and variable/file
我准备了一个带有功能的简单记录器 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
)。它也是由传递的方法返回的 returns 值。例如
logMETHOD scp test.txt ala@host:/direcotry
它可以工作,但不幸的是我不能使用它,因为我无法访问我需要使用的服务器上的 /dev/fd/5
。 "Permission denied".
我尝试使用临时文件而不是文件描述符,但它会破坏动态输出,例如 scp
进度条。
有没有什么方法可以不使用文件描述符来实现这个功能?
您似乎有权使用 &5
但无权使用 /dev/fd/5
。您可以尝试通过 运行 ls -l /dev/fd/5
来追查原因,并将其与您的脚本在其下运行的用户+组进行比较。不过,尝试替换可能更简单:
tee /dev/fd/5;
与:
tee >(cat >&5)
我准备了一个带有功能的简单记录器 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
)。它也是由传递的方法返回的 returns 值。例如
logMETHOD scp test.txt ala@host:/direcotry
它可以工作,但不幸的是我不能使用它,因为我无法访问我需要使用的服务器上的 /dev/fd/5
。 "Permission denied".
我尝试使用临时文件而不是文件描述符,但它会破坏动态输出,例如 scp
进度条。
有没有什么方法可以不使用文件描述符来实现这个功能?
您似乎有权使用 &5
但无权使用 /dev/fd/5
。您可以尝试通过 运行 ls -l /dev/fd/5
来追查原因,并将其与您的脚本在其下运行的用户+组进行比较。不过,尝试替换可能更简单:
tee /dev/fd/5;
与:
tee >(cat >&5)