我为个人用途制作了一个bash脚本,该脚本使用适当的选项设置了Selenium网络驱动程序。这是它的原始链接 - https://del.dog/raw/edivamubos
如果我在将它写入文件后使用 curl 执行此脚本,例如..
curl https://del.dog/raw/edivamubos -o test.sh &&
chmod u+x test.sh &&
bash test.sh
脚本可以完美地工作,因为它的预期工作
但通常我喜欢直接使用 curl 执行脚本,所以当我这样做时。
curl https://del.dog/raw/edivamubos | bash
脚本工作得很奇怪,它不断循环重复第22,23和29行。 我简直不敢相信,所以我测试了 3,4 次并且可以确认。
现在
- 在两种情况下,相同的脚本行为不同的原因是什么?
- 我该如何修复它(即即使在直接执行它而不写入文件的情况下使其正常工作(
编辑- 如果有人想要,他们可以在谷歌colab中快速测试(以防有人打算测试但不想在本地安装任何软件包(。我之所以提到这件事,是因为您将无法在任何bash IDE中正确重现它。
当你通过管道将脚本传送到 bash 时,这个命令(第 24 行(:
read -p "Enter your input : " input
读取下一行(即第 25 行,case $input in
(,因为 Bash 的 stdin 连接到 curl 的 stdout,并且read
读取与 Bash 相同的描述符。
为了避免这种情况,开发人员可以更改脚本,以便从/dev/tty
(即控制终端(读取所有输入。 例如:
read -p 'prompt' input </dev/tty
或者用户可以使用以下方法之一,以便read
从终端读取,而不是从中读取的描述符。
bash -c "$(curl link)"
bash <(curl link)