Хотя у каждой команды может быть свой собственный буфер записи, нет буфера записи, который был бы общим для команд, даже встроенных -в bash (, или даже двух вызовов одной и той же команды, встроенной -в или нет. ).
Даже ksh93, который, как известно, выполняет некоторую оптимизацию ввода-вывода (, например, он будет читать -вперед и делиться некоторыми данными о вводе (, вызывая некоторые ошибки )), не т сделать это.
Так что в этом отношении это будет безопасно. После завершения команды, такой как ваша echo aaaaaaaaaaaaabbbbbbbbbbbbbbbbb
, и при условии, что она не разветвляет автоматический процесс, работающий в фоновом режиме, вы можете быть уверены, что все операции ввода-вывода выполнены.
Несколько замечаний. В функции типа:
f() {
{
echo x
return
echo y
} > file
echo something else
}
В оболочке Bourne (и только в оболочке Bourne )это return
прерывало вывод внутренней группы команд, но не возвращало функцию, как в той древней оболочке, эта группа команд выполнялась в подоболочку из-за перенаправления (, поэтому вы увидитеsomething else
).
Это больше не происходит в современных оболочках, таких как bash
, но у вас была бы та же проблема в bash, если бы вы написали:
f() {
(
echo x
return
echo y
) > file
echo something else
}
или
f() {
{
echo x
return
echo y
} | tr xy ab
echo something else
}
Остерегайтесь некоторых случаев, когда некоторые команды не ожидаются. В:
f() {
{
echo >(sleep 1; echo x)
return
} > file
}
f; cat file
Вы можете обнаружить, что x
не отображается, потому что cat
запускается до echo x
.
Некоторые оболочки (, хотя и не bash
), имеют аналогичные потенциальные проблемы с компонентами конвейера, кроме самого правого.
Подумав, что dhcp-сервер немного излишен только для создания соединения между двумя устройствами, а также может вызвать проблемы, если Pi снова подключится к сети, в которой уже есть dhcp-сервер, я стал искать другие возможности.
Я обнаружил, что если устройство не может подключиться к DHCP-серверу, интерфейс автоматически получает адрес zeroconf через ~30 сек.
Адрес zeroconf имеет диапазон от 169.254.1.0/16 до 169.254.254.255/16.
Итак, после подключения обоих устройств и небольшого ожидания оба получили адрес и теперь могут общаться.
Бонус :это также создает своего рода запись DNS, поэтому я могу пропинговать свой Pi (имя хоста raspberrypi )с моего компьютера с Windows с адресом «raspberrypi.local».