我想在我的 raspi 的 rc.local 中使用这个循环来初始化一些 GPIO 引脚,但它没有执行。但是当我通过 ssh 运行代码时,它就可以工作了。
for i in {4,17,27,22,5,6,13,26}; do
echo "$i" > /sys/class/gpio/export;
sleep 0.1;
echo "out" > /sys/class/gpio/gpio"$i"/direction;
echo 0 > /sys/class/gpio/gpio"$i"/value;
done;
此外,此代码在 rc.local 中仍然有效:
echo 4 > /sys/class/gpio/export;
echo out > /sys/class/gpio/gpio4/direction;
echo 0 > /sys/class/gpio/gpio4/value;
为什么循环不起作用?
大括号扩展
{x,y,z,t}
不是标准的 /bin/sh 功能;它是 bash/ksh/zsh 的扩展。但是,在某些 Linux 发行版中,/bin/sh 实际上是ash或dash shell——一种更快但更有限的变体,仅支持“标准 POSIX shell”功能,但通常不支持特定于 bash 的扩展。
这意味着循环只运行一次,整个字符串 "
{4,17,27,22,5,6,13,26}
" 作为$i
.在您的特定情况下,大括号扩展完全没用。您可以直接列出项目:
在其他情况下,您可以使用例如'seq' 来替换{a..z},或者更改整个脚本以使用
#!/bin/bash
(即专门调用Bash)而不是/bin/sh。