如何让 #tee 采用 -append 而不是 -a 选项(bionicpup32-8.0)

如何让 #tee 采用 -append 而不是 -a 选项(bionicpup32-8.0)

我正在尝试在我的bionicpup32-8.0

运行命令teamviewer返回:

Init... 
tee: unrecognized option: append
BusyBox v1.30.1 (2019-04-24 21:49:26 +08) multi-call binary.

Usage: tee [-ai] [FILE]...

Copy stdin to each FILE, and also to stdout

    -a  Append to the given FILEs, don't overwrite  -i  Ignore interrupt signals 
    (SIGINT) Checking setup... Launching TeamViewer ... Starting network process (no daemon)
    Network process already started (or error) Launching TeamViewer GUI ...

我想这与命令有关tee,运行该命令teamviewer将运行该-append选项,而我的命令则tee采用-a选项。

有没有办法

覆盖我的tee以接受-append吗?

- 或者 -

覆盖teamviewer运行 -a 选项?

- 或者 -

还有其他方法可以解决这个问题吗?

答案1

有什么办法可以覆盖我的tee-append

这是包装器脚本的工作。请看这个:

#!/bin/sh
mark=
for arg; do
   [ -z "$mark" ] && { set --; mark=1; }
   case "$arg" in
   -append|--append )
      set -- "$@" -a
   ;;
   --ignore-interrupts )
      set -- "$@" -i
   ;;
   * )
      set -- "$@" "$arg"
   ;;
   esac
done
exec /full/path/to/real/tee "$@"

用操作系统中的/full/path/to/real/tee真实的完整路径替换。检查shebang 中的路径是否正确(可能就足够了)。将脚本保存为比真实目录更早的目录中。使脚本可执行()。一种巧妙的方法是为包装器创建一个自定义目录;将包装器放在那里并修改变量,以便首先列出目录。tee/bin/shshls /bin/shteePATHteechmod +x teePATH

或者,您可以根据需要修改PATH单次调用,如下所示:teamviewer

PATH="/path/to/dir/with/wrapper:$PATH" teamviewer

不管怎样,如果PATH正确,调用tee将运行您的包装器。teamviewer该方法将在以下条件下工作:

  • 如果tee被调用为tee,而不是使用包含 的路径名/(换句话说:如果调用使用PATHfind tee);
  • 并且如果它自身teamviewer不被覆盖。PATH

包装器相当简单。它将其所有参数复制到一个新数组,但将-append或替换--append-a。最后,它用真实的 替换自身tee,并为其提供修改后的参数数组。

您说麻烦的选项是-append,但 GNUtee支持--append,所以我想可能是--append。包装器会检测两者。

请注意,您想要运行的工具可能会tee调用另一个不可移植的选项。我的意思是unrecognized option,您可能指的是第一的无法识别的选项,并且才不是意味着所有后续选项都被识别。包装器会预先转换--ignore-interrupts-i您的支持。您根本不支持tee更复杂的tee支持选项实现。如果在内部使用此类选项,则当前包装器将无济于事。可以轻松修改包装器,以便删除某些选项,但实现它们的实际功能通常是一项不简单的任务(如果可能的话)。希望包装器足以满足您的需求。teeteamviewer

相关内容