htonl()
и ntohl()
функции в библиотеке C с обратным порядком байтов на самом деле ничего не делают (они - "нет" s). Таким образом, тот же код может использоваться и на БЫТЬ и на машины LE; скомпилированный с lib C на машине LE, те функции зеркально отразят байты, но на БЫТЬ машиной, они оставят их тем же, так как сетевой порядок байтов является обратным порядком байтов, и хост уже является обратным порядком байтов.
Другими словами, в Вашем примере, БЫТЬ машиной никогда ничего не изменяет. Только машина LE B делает.
Когда вы перенаправляете вывод curl
в sh
, вы делаете текст сценария стандартным вводом оболочки, которая принимает его как команды для запуска. После этого нечего читать
. Даже если бы он попытался, он ничего не получил бы от входа терминала, потому что он не подключен к нему. Канал заменил стандартный ввод для процесса sh
.
Следующая проблема заключается в том, что read -i
является не функцией POSIX sh , а скорее расширением, поддерживаемым bash
. Ubuntu использует тире
, минимальную POSIX-совместимую оболочку с минимальными расширениями, как / bin / sh
по умолчанию. Вот почему он специально отклоняет параметр -i
(хотя он поддерживает -p
).
Если вы сами используете более функциональную оболочку, вы можете попробовать что-то вроде:
bash <(curl http://example.com/provisioning.sh)
, который создает канал для bash
для чтения вывода curl
из и предоставляет это как аргумент файла сценария. В этом случае стандартный ввод сценария по-прежнему подключен к терминалу, и чтение
будет работать (но обратите внимание на большое предостережение под строкой).
Я также отмечу, что « curl | sh
» обычно неодобрительно на как очевидную проблему безопасности, но вам лучше всего известно, ситуация, в которой находится ваш скрипт.
Другой, более переносимый способ сделать это — создать другой файловый дескриптор:
exec 3<>/dev/tty
read -u 3 -p "Gimme some stuff: " stuff
Я обнаружил, что здесь :https://superuser.com/questions/834502/possible-to-get-a-bash-script-to-accept-input-from-terminal-if-its-stdin-has-bee
В моем случае я быстро нашел замену в своем скрипте, чтобы это работало:
exec 3<>/dev/tty
read_cmd="read -u 3"
$read_cmd -p "name: " my_name
$read_cmd -p "email: " my_email
$read_cmd -s -p "password: " my_password