使用 tee (或其他命令)将错误或消息记录到文件,但仅当变量 x==“yes” 时才有效。

发布于 2024-10-11 16:12:45 字数 452 浏览 4 评论 0原文

我尝试使用 if 语句,但这不起作用,因为 tee 命令有两个括号,一个在开头,一个在结尾。

我尝试了类似的方法,但也不起作用

if [[ "$logging" == "yes" ]]; then
    ftpt="2>&1 | tee $ftpLF"
else
    ftpt="" 
fi
} "$ftpt"

错误:

./ftp.sh: line 149: syntax error near unexpected token `"$ftpt"'
./ftp.sh: line 149: `} "$ftpt"'

我目前使用此功能,但我无法选择打开/关闭它,它总是打开

{
 ....commands....
} 2>&1 | tee "$ftpLF"

I tried using an if statement but this doesn't work as the tee command has the two brackets, one at the start and one at the end.

I tried something like this, which didn't work either

if [[ "$logging" == "yes" ]]; then
    ftpt="2>&1 | tee $ftpLF"
else
    ftpt="" 
fi
} "$ftpt"

Error:

./ftp.sh: line 149: syntax error near unexpected token `"$ftpt"'
./ftp.sh: line 149: `} "$ftpt"'

I use this at the moment but I have no option of turning it on/off, it's just always on

{
 ....commands....
} 2>&1 | tee "$ftpLF"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤独岁月 2024-10-18 16:12:45

如果您可以一致地引用内容,一种选择是使用 eval 强制 Bash 计算命令的添加部分:

eval '{
  command1 "foo bar" baz
  command2
} "$ftpt"'

另一种选择是使用实际的命名函数:

ftpcommands() {
  command1 "foo bar" baz
  command2
}

if [[ "$logging" == "yes" ]]; then
    ftpcommands 2>&1 | tee "$ftpLF"
else
    ftpcommands
fi

后者可能是首选选项,因为您不必担心奇怪的引用问题或其他类似问题。

One option, if you can consistently quote things, is to use eval to force Bash to evaluate the added portions of the command:

eval '{
  command1 "foo bar" baz
  command2
} "$ftpt"'

Another option would be to use an actual named function:

ftpcommands() {
  command1 "foo bar" baz
  command2
}

if [[ "$logging" == "yes" ]]; then
    ftpcommands 2>&1 | tee "$ftpLF"
else
    ftpcommands
fi

The latter is probably the preferred option, since you don't have to worry about weird quoting issues or other such.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文