【发布时间】:2021-10-31 09:52:41
【问题描述】:
我遇到的问题是在脚本中运行一个名为 example 的符号链接(示例指向 b.sh)。
从终端运行 $ example 会将消息 scriptB was found 附加到日志中。如果我从$HOME 运行$ ./b.sh,也会发生同样的情况。但是,example 在启动 X 时不会执行。
我在我的系统上创建了以下最小设置来模仿我的问题。
a.sh
#!/bin/bash
type example ||
echo "error: example could not be found." >>"$HOME/example.log"
~/b.sh
b.sh
#!/bin/bash
echo "scriptB was found" >>"$HOME/example.log"
.xinitrc
#!/bin/sh
if [ -x "$HOME/a.sh" ]; then
bash ~/a.sh
fi
最小设置
- X 执行
a.sh - 使用
$ ln -s ~/a.sh ~/.local/bin/example创建的链接 - 使用
$ chmod u+x a.sh b.sh使脚本可执行并使用ls -l验证可执行 - 在
.bashrc中将$HOME/.local/bin附加到我的PATH 环境变量中
重启X(或重启)后的日志是:
error: example could not be found.
scriptB was found
【问题讨论】:
-
>/dev/null只重定向标准输出,不重定向标准错误。 -
@CharlesDuffy 我只是在那里让 a.sh 保持沉默。使用 &> 重定向或没有重定向的示例似乎仍然不存在。
-
appended $HOME/.local/bin to my PATH environment variable究竟在哪里以及如何?不在.xinitrc? -
@KamilCuk 在我的
.bashrc我有PATH="$PATH:$HOME/.local/bin" -
in my .bashrc所以它在.bashrc。您的脚本不使用.bashrc。脚本中的导出路径。请注意,您有#!/bin/bash,但您使用. ~/a.sh,所以它使用sh,而不是bash(无论如何都不使用.bashrc)。这是一些非常奇怪的bash -c '. ~/b.sh',只需运行脚本bash ~/b.sh,在子shell 中进行采购没有意义。