Это - hardcoded, но можно переопределить значения по умолчанию параметром ядра init=...
.
От init/main.c
:
if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s. Attempting "
"defaults...\n", execute_command);
}
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
panic("No init found. Try passing init= option to kernel. "
"See Linux Documentation/init.txt for guidance.");
Вы должны
python -i
Так:
python -i < p1
И в другом месте:
exec 3> p1
echo '1j*1j' >&3
...
# and when done, close that file descriptor so python sees the EOF:
exec 3>&-
Можно использовать tail -f
сохранять FIFO открытым после echo
записи к нему.
tail -n1 -f p1 | python
Почему это работает
python
читает из p1
. Когда это достигает конца файла, это прекращает читать. Это - нормальное поведение для чтений файла, даже если файл является именованным каналом. tail
с -f
(следуйте) флаг будет продолжать читать из файла после того, как его конец будет достигнут.
echo "print \"Hello World\" " > p1
во втором терминале и ничего не произошло - но терминал не был заблокирован также. Терминал с Python остался заблокированным пока я ^c
это и выход это и оконечный Python с клавиатурой прерывает сообщение, отображаемое Python.
– Lord Loh.
19.04.2013, 06:26
tail -f
обманите при распаковке разделенного на блок архива tar через именованный канал. Это работало замечательно.
– Mael
14.10.2017, 16:39
Необходимо отправить всю программу сразу.
Когда Вы называете выполненными python < p1
оболочка ожидает входа прежде, чем вызвать Python. Таким образом, Python даже не начинает выполняться вообще, пока весь поток данных не был считан оболочкой и затем передается в целом python
.
Даже выполнение python -u p1
вместо этого (то есть, освободил буфер, и читайте из файла p1
) python
попытается считать весь файл, прежде чем он выполнит любой из него.
Попробуйте этот эксперимент.
Терминал 1:
mkfifo p1
python < p1
Терминал 2:
cat > p1
print "Hello World"
print "Hello World"
Вы будете видеть, что можно отправить несколько строк, но Python в Термине 1 ничего не делает. Теперь нажмите ctrl+D. Вся программа выполняется сразу.
Так, для суммирования если Вы хотите, чтобы Python читал из канала, необходимо отправить всю программу. Вы не можете использовать Python в интерактивном режиме этот путь.
Возможно, подход хвоста лучше (более гибок), но как альтернатива:
{ echo -n "print \"Hello World\""; cat; } > p1
-n
мог бы иметь o быть удаленным. И после этого, 0. Терминал с echo
команда становится заблокированной 1. Python не выполняет команду, пока я не нажимаю ^c
в echo
терминал и оба оконечные процесса.
– Lord Loh.
19.04.2013, 06:23
exec 3> p1
выполнение и что&3
&exec 3> &1
?Спасибо. – Lord Loh. 19.04.2013, 21:15exec 3>&-
работайте то же какexec 3>&1
здесь? – Wildcard 19.04.2016, 05:293>&-
здесь.3>&1
работал бы также, но имел бы мало смысла. Спасибо – Stéphane Chazelas 19.04.2016, 08:39