Я столкнулся с этой интересной проблемой при заполнении моей панели WM информационным текстом, который применяется путем установки заголовка корневого окна, т.е. xsetroot -name "clever words"
С этой целью печать состояния удачно работает в терминале:
fortune -s | while read -r; do xsetroot -name "$REPLY"; done
Тем не менее, тот же сбой при запуске из сценария оболочки:
#!/bin/sh
cat /tmp/afile | while read; do echo "$REPLY"; done
Производит:
$ sh afilereader
afilereader: 2: читать: arg count
Конечно, это можно исправить, назначив наш результат удачи переменной, затем используя xsetroot с указанной переменной. Но я все еще хотел бы понять, почему это не работает в сценарии.
Я понимаю, что каждая команда по обе стороны конвейера выполняется внутри своей собственной оболочки, но не вижу, как их локализованные переменные могут повлиять на цикл чтения. Или переменные выходят за рамки даже между циклами?
Что мне не хватает?
Обновление:sh
я связан с тиром, который находится в процессе сделал POSIX - совместимым. Используя более почтенный bash
решил это.
read
можно было вызывать без переменной: pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html