我经常使用这种模式在 GitHub 中执行原始版本的远程 Bash 脚本:
wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | bash
Run Code Online (Sandbox Code Playgroud)
通常我可以毫无问题地做到这一点,但是由于我将以下代码添加到某个脚本中,我得到了一个无限循环echo
(即使我只是将它从 GitHub 复制粘贴到终端并直接执行,它也经常发生):
wget -O - https://raw.githubusercontent.com/<username>/<project>/<branch>/<path>/<file> | bash
Run Code Online (Sandbox Code Playgroud)
我至少可以部分解决这个问题,例如:
while true; do
read -p "Example question: Do you wish to edit the PHP file now?" yn
case $yn in
[Yy]* ) nano PROJECT/PHP_FILE; break;;
[Nn]* ) break;;
* ) echo "Please answer yes or no.";;
esac
done
Run Code Online (Sandbox Code Playgroud)
这表明| bash
管道至少会使问题恶化,因为问题总是伴随着它发生。
为什么会echo "Please answer yes or no."
“无休止地”发生?(我用CTRLC+停止它C)
您在单行执行命令和/或 …
我知道在 Bourne shell 和派生类中,IFS=
将 IFS 设置为 null,因此 shell 不会执行任何字段拆分。
我记得阅读过:
echo "$*"
IFS= echo "$*"
当我运行这两个命令时,一次在 CentOS 中,一次在 WSL(uname -o
= GNU/Linux only,所以我不知道发行版)我只有空行。
上面的测试命令是什么意思,它真的是学习 IFS 的好例子吗(如果不是,你会建议什么简单的两行测试)?