Вы можете использовать вариант трюка / dev / fd / 0
] для передачи строки в сценарий, который ожидает имя файла:
php ./ScriptName.php php://fd/0 <<<'mywords'
Например, script.php содержит:
Запуск:
php script.php php://fd/0 <<<'Some text'
выводит:
Read: Some text
Ситуация такова, что вы начинаете с командной строки, а затем вызываете startx
, когда будете готовы. Эмпирически вы полагаете, что графический интерфейс пытается повторно выполнить .profile
, а сценарий python не может выйти, поэтому графический интерфейс зависает.
Одно из решений, которое, возможно, стоит попробовать, - это установить переменную среды, чтобы ваш код запускался только один раз:
# This is .profile
#
if test -z "$DONE_PROFILE" -o "X$DONE_PROFILE" != "X${USER:-unknown}"
then
# Protected code here will be called only once
#
echo "About to run keyboard polling"; sleep 3
python /home/pi/poll_keyboard.py
export DONE_PROFILE="${USER:-unknown}"
fi
Другой вариант - вызвать код, только если stdin подключен к терминалу:
# This is .profile
#
if test -t 0 -a -t 1
then
# Protected code here will be called only if stdin and stdout is a tty
#
echo "About to run keyboard polling"; sleep 3
python /home/pi/poll_keyboard.py
fi
Это второе предложение, вероятно, более безопасно, поскольку оно будет обрабатывать программы, которые входят в систему удаленно для запуска службы (например, rsync
или scp
).
Вы даже можете объединить два, чтобы код учитывался только один раз, а затем выполнялся только в том случае, если stdin и stdout подключены к терминалу. (Просто вложите операторы if ... fi
.)
Меня попросили объяснить условие test
, которое защищает код в первом примере.
if test -z "$ DONE_PROFILE" -o "X $ DONE_PROFILE"! = "X $ {USER: -unknown}"
Это может быть записано на английском языке как " If $ DONE_PROFILE
пуст или $ DONE_PROFILE
не соответствует $ USER
... ".
Конструкция $ {USER: -unknown}
заменяет unknown
, если $ USER
пусто или не задано.
В этом случае, вероятно, нет необходимости помещать X
перед обеими сторонами выражения ! =
, но это связано с защитным подходом к написанию сценариев.Рассмотрим переменную $ A
со значением -z
и другую переменную $ B
со значением apple
. В некоторых оболочках запись test "$ A"! = "$ B"
будет заменена на test -z! = Apple
, что синтаксически неверно. Добавление к обеим сторонам префикса X
приведет к расширению test X-z! = Xapple
, что является синтаксически безопасным.