sudo ./get_folder.sh 没有这样的文件或目录

sudo ./get_folder.sh 没有这样的文件或目录

我正在按照说明指南在 ubuntu 20.04 LTS WSL 上安装程序。但是,当要求输入行“sudo ./get_folder.sh”时出现错误

/usr/local/bin/test$ sudo ./get_folder.sh
grep: ./get_folder.sh: No such file or directory
./get_folder.sh: line 13: /usr/local/bin/linux_bin/get_folder.sh.runme: Success

我在目录“/usr/local/bin/test$”中,其中包含脚本 get_folder.sh

根据指南,应该发生的是,下载文件夹中的文件将被放置在 /usr/local/bin/ 中。

为什么我无法运行该脚本?

有帮助的其他信息:我的 bashrc 是

export PATH=/usr/local/bin:$PATH
export KMP_STACKSIZE=8m
export DISPLAY=:0

该脚本的网页包含以下文本:

“作为 root,脚本将程序复制到 /usr/local/bin/linux_bin,并将它们链接到 /usr/local/bin。作为普通用户,它们被下载到 $HOME/bin/linux_bin,并链接到您的 $HOME/bin。在后一种情况下,请确保 $HOME/bin 在您的 $PATH 中。”

答案1

鉴于您在问题中引用的说明,我假设您正在尝试从这一页

笔记: 虽然我可以解决你的安装问题,但在我看来,XDS 需要一个完整的图形环境,而 WSL 则不需要现在提供。有关详细信息,请参阅本答案的结尾。

据我所知,安装脚本有问题。它以以下代码开头:

#!/bin/bash

if [ "$(whoami)" == "root" ]; then
  export DESTINATION=/usr/local/bin/linux_bin
else
  export DESTINATION=$HOME/bin/linux_bin
fi
mkdir -p $DESTINATION
cd $DESTINATION
# run a "runme" helper script so that the current get_folder.sh may be overwritten by the new one:
grep -v runme ./get_folder.sh > ./get_folder.sh.runme
chmod +x ./get_folder.sh.runme
exec ./get_folder.sh.runme && exit

wget -O- https://strucbio.biologie.uni-konstanz.de/pub/linux_bin/xds_extra_linux.tar | tar xjvf -

当使用 运行时sudo,即:

  • 创建/usr/local/bin/linux_bin目录
  • 对该目录的更改
  • 尝试创建并运行其自身(脚本)的副本,以便最后一行中新下载的文件可以覆盖原始文件。该grep命令从新创建的副本中删除脚本的“自我复制”部分。

cd然而,由于就是不存在。它尝试对 运行 grep /usr/local/bin/linux_bin/get_folder.sh,但脚本仍然在原始位置。

结果是空的 /usr/local/bin/linux_bin/get_folder.sh.runme, 哪个从消息中可以看出,在第 13 行“成功”执行。但是,运行一个空脚本当然不会做任何事情。

就是这样 - 然后“脚本复制”就退出,甚至不需要进入“下载和解压”步骤。

脚本的创建者可能陷入了某种心理“陷阱”——当他们测试它时,他们可能总是在已经安装它的系统上运行它。所以它是有效的。但它惯于第一次工作。

解决方案相当简单。虽然您提到您正在 Windows Subsystem for Linux 上运行此程序,但故障实际上也发生在普通的 Ubuntu 上。但是,WSL 的好处在于,我可以在不到一分钟的时间内启动一个新的“一次性”实例,以便测试类似的东西,而不会让我的日常会话充斥着我不需要的软件。所以我确实测试了这一点,而且它成功了:

从目录中get_folder.sh

sudo mv get_folder.sh /usr/local/bin/linux_bin
cd /usr/local/bin/linux_bin
sudo ./get_folder.sh

这是因为您之前运行脚本的失败尝试已经创建了目录,所以您只需将脚本移动到那里(它错误地期望然后将文件保存为 .bat 文件,然后再次运行它。

有关在 WSL 下运行图形应用程序的其他信息

要在 WSL 中运行图形应用程序,你需要执行以下两项操作之一:

  • 加入 Windows Insider 计划并运行 Windows 的最新预览版。这包括对 WSLg 的支持,这是一项新功能,可让您在 WSL 下运行完整的 Linux GUI。当然,您必须愿意处理运行 Windows“测试版”时出现的任何错误。

  • 第二种选择是手动设置 X 服务器和必要的库。这远远超出了本回答的范围,所以我只要求您使用您选择的搜索引擎来查找在 wsl 上安装 x

请注意,我还没有做过这两件事。我非常期待今年年底发布的下一个 Windows 版本,该版本在生产版本中包含 WSLg,但在此之前我不需要添加对它的支持。

相关内容