我正在按照说明指南在 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,但在此之前我不需要添加对它的支持。