Afs*_*sal 34 startup startup-applications
我在安装 Ubuntu 19.10 后发现了这个 im-launch 启动条目,它执行
sh -c 'if ! [ -e "/usr/bin/ibus-daemon" ] && [ "x$XDG_SESSION_TYPE" = "xwayland" ] ; then exec env IM_CONFIG_CHECK_ENV=1 im-launch true; fi'
我想知道这个条目的目的,如果我禁用它会发生什么?
UnK*_*OWn 32
-e检查文件是否/usr/bin/ibus-daemon存在?存在意味着真不存在意味着假。
! 想要确认上面的值是假的,如果上面的值是真的,它不会执行任何事情。
[ "x$XDG_SESSION_TYPE" = "xwayland" ]根据您选择在登录屏幕上登录的方式,这可以具有以下任一值。您将选择 x11 或 Wayland 哪个会话。
"xx11" = "xwayland"
"xwayland" = "xwayland"
$XDG_SESSION_TYPE 的示例输出
administrator@pratap:~$ echo $XDG_SESSION_TYPE
x11
Run Code Online (Sandbox Code Playgroud)
另一个例子:
administrator@pratap:~$ echo $XDG_SESSION_TYPE
wayland
administrator@pratap:~$
Run Code Online (Sandbox Code Playgroud)
如果第一个表达式为假且 x$XDG_SESSION_TYPE = xwayland 然后执行命令 env IM_CONFIG_CHECK_ENV=1 im-launch true
如果第一个表达式为真或 x$XDG_SESSION_TYPE 不等于 xwayland,则不要做任何事情。
看 man test
! EXPRESSION
EXPRESSION is false
Run Code Online (Sandbox Code Playgroud)
和
-e FILE
FILE exists
Run Code Online (Sandbox Code Playgroud)
你可以阅读更多关于这个命令的作用 then exec env IM_CONFIG_CHECK_ENV=1 im-launch true;
看man env与人im-launch
默认情况下在 Ubuntu 19.10 中/usr/bin/ibus-daemon存在。所以命令不会被执行。
env IM_CONFIG_CHECK_ENV=1 im-launch true
Run Code Online (Sandbox Code Playgroud)
当有文件/usr/bin/ibus-daemon并且我的会话是x11
这是关于 IM 的一些事情
当没有文件/usr/bin/ibus-daemon并且我的会话是wayland
这是与上面不同的事情,这意味着应用了env,然后发生了连锁反应。
因此,如果您从启动列表中禁用或启用此功能,除非此文件不存在/usr/bin/ibus-daemon并且您的会话wayland条件满足,否则不会发生任何事情。
小智 5
我正在研究如何配置 Ubuntu 以提高其性能,最终来到这里,这很有趣。
我的im-launch启动入口:
sh -c 'if [ "x$XDG_SESSION_TYPE" = "xwayland" ] ; then exec env IM_CONFIG_CHECK_ENV=1 im-launch true; fi'
Run Code Online (Sandbox Code Playgroud)
由于@UnKNOWn 详细回答了,但@foobar 的评论是我的情况,所以我深入研究了。
sh是一种命令语言解释器,它执行从命令行字符串、标准输入或指定文件读取的命令。
execLinux 中的命令用于从 bash 本身执行命令。
if CONDITION true THEN execute COMMAND
im-launch命令用于启动输入法框架服务器守护进程(例如 ibus-daemon),为客户端程序设置适当的环境变量,并执行 SESSION-PROGRAM(例如 x-session-manager)。
ibus-daemon是ibus的守护程序,也是用户激活ibus守护程序、引擎和面板的启动程序。
daemon是作为后台进程运行的计算机程序,而不是在交互式用户的直接控制下。
ibus是一个智能输入总线。
bus只是一组连接多个模块(处理器、内存、IO 设备)的电线。
exec然后我的问题是exec env当我们已经执行来自sh.
该exec命令用指定的命令替换当前的 shell 进程。通常,当您运行命令时,会生成(分叉)新进程,而 exec 命令不会生成新进程。相反,当前进程会被新命令覆盖。换句话说,exec 命令是在当前 shell 的位置执行的,而不创建新进程。
使用env- 如果您想在执行主程序之前修改程序的环境,您通常会编写一个脚本并在其末尾启动主程序。但当时脚本没有必要留在内存中。因此,在这些情况下使用 exec,以便主程序可以替代母脚本。