我一直尝试在 chroot 中运行命令(对此很陌生),并且得到了以下输出。
root@hostname:~ # bash <(wget -q0 https://raw.githubusercontent.com/ubports/unity8-desktop-install-tools/master/install.sh)
bash: /dev/fd/63: No such file or directory root
答案1
TL;DR:将/root
chroot 之外的文件夹复制到 chroot 目录中
操作<(...)
符被称为进程替换,是一种运行命令的方式,其输出进入匿名管道。这就是 /dev/fd/63。其目的是允许外部命令(这里是bash
)将另一个命令的输出视为文件。通常,该形式将用于 <
将该伪文件对象重定向到bash
的输入流中。
bash < <(wget -q0 https://raw.githubusercontent.com/ubports/unity8-desktop-install-tools/master/install.sh)
这通常与 没什么区别wget https://stuff.com/blah | bash
。在这两种情况下,通常不建议使用此类命令,除非您百分百确定所下载的脚本不是来自可疑来源并且不是恶意软件。
但是,由于您提到在 中运行命令,chroot
并且脚本输出No such file or directory root
,并且因为 bash 允许运行脚本,因为这里正在执行您的脚本,但chroot 中bash script.sh
没有命名的目录。您可以通过 修复它。为了获得更好的结果,我建议先阅读脚本,查看它需要什么,然后将其复制到 chroot 文件夹,然后在文件夹中本地运行脚本。无需多次运行 wgetroot
sudo cp -R /root chrootdir
所以脚本可以正常工作。shell 脚本中的错误通常以 <shell>: <command user typed>: error message
这样的形式出现:脚本被临时存储为 /dev/fd/63 并运行,但它找不到所需的内容。
也可以看看,
答案2
错误信息
/dev/fd/63 No such file or directory
问题来源
事实上,该目录/dev/fd/
在该机器上不存在。
解决方案
解决方案是创建一个从/proc/self/fd
到的符号链接/dev/fd
,如下所示:
ln -s /proc/self/fd /dev/fd
如果没有这个,进程替换<(..)
就无法在 QNAP 上进行。
答案3
我最近遇到了同样的问题,但后来我意识到只有当你运行sudo/根用户。
如果我运行:
sudo bash <(echo "It worked")
我得到:
bash: /dev/fd/63: No such file or directory
但如果我运行:
bash <(echo "It worked")
它运行良好。
答案4
我刚刚也遇到了同样的情况。结果;
通过 VSCode 终端 (或 PowerShell/PSCore) 进行 SSH 不喜欢这样做。当我通过 PUTTY 进行 SSH 时,一切都很顺利。
我想,你知道的越多,就越好~