.sh 文件上的最后一个命令不会运行

.sh 文件上的最后一个命令不会运行

我在 *.sh 文件中有此脚本,用于启用自然滚动。我已将其添加到Startup Application

#!/bin/sh
xinput set-prop 11 268 -106 -106
nautilus -q && nautilus -n

问题是,每当我登录时,最后一个命令 ( nautilus -n) 都不会运行 - 这很烦人,因为我无法使用 Super 按钮打开 Dash - 我必须手动运行 nautilus。出了什么问题?

更新:

我已经在终端上逐行测试了上述脚本,它运行良好。只有当我从 .sh 文件运行它时才会出现问题。

nautilus -q && touch $HOME/Desktop/reported-success.txt给我 txt 文件,

其结果nautilus -q && nautilus -n &> $HOME/nautilus-output.log为:

Initializing nautilus-open-terminal extension
Initializing nautilus-image-converter extension
Initializing nautilus-dropbox 1.4.0

答案1

从脚本上看,这意味着nautilus -q返回了一个非零退出代码。因此,&&计算结果为 false 并且nautilus -n不会执行。

你告诉它:跑nautilus -n 如果 nautilus -q成功了。成功的定义是0shell 中的退出代码。

使用;而不是&&无条件地执行此操作或使用小的包装脚本将您想要接受为“成功”的可能的返回代码转换为0

拆除正在运行的nautilus实例的另一种方法显然是使用pkill这种方式:

pkill -u $(whoami) ^nautilus

您可能想要指定一个特定的信号(pkill -SIGNALNAME -u ...),但我没有找到关于对哪些信号nautilus做出反应的文档。

上述命令将终止nautilus以您身份运行的所有实例(whoami)。


使用它来找出第一个命令(nautilus -q)返回的内容:

nautilus -q || echo "exit code: $?"

您看到了什么?如果不是,0那么这显然就是脚本逻辑所暗示的问题。

答案2

用换行符/回车符或空行结束脚本
,否则不会执行最后一个命令。

相关内容