我正在尝试在我的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/sh
sh
ls /bin/sh
tee
PATH
tee
chmod +x tee
PATH
或者,您可以根据需要修改PATH
单次调用,如下所示:teamviewer
PATH="/path/to/dir/with/wrapper:$PATH" teamviewer
不管怎样,如果PATH
正确,调用tee
将运行您的包装器。teamviewer
该方法将在以下条件下工作:
- 如果
tee
被调用为tee
,而不是使用包含 的路径名/
(换句话说:如果调用使用PATH
findtee
); - 并且如果它自身
teamviewer
不被覆盖。PATH
包装器相当简单。它将其所有参数复制到一个新数组,但将-append
或替换--append
为-a
。最后,它用真实的 替换自身tee
,并为其提供修改后的参数数组。
您说麻烦的选项是-append
,但 GNUtee
支持--append
,所以我想可能是--append
。包装器会检测两者。
请注意,您想要运行的工具可能会tee
调用另一个不可移植的选项。我的意思是unrecognized option
,您可能指的是第一的无法识别的选项,并且才不是意味着所有后续选项都被识别。包装器会预先转换--ignore-interrupts
为-i
您的支持。您根本不支持tee
更复杂的tee
支持选项实现。如果在内部使用此类选项,则当前包装器将无济于事。可以轻松修改包装器,以便删除某些选项,但实现它们的实际功能通常是一项不简单的任务(如果可能的话)。希望包装器足以满足您的需求。tee
teamviewer