Что такое использование; в одной строке?

Что делает ; в однострочных сценариях:

 while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null & 

Означает ли это новую строку или «следующую команду»?

Это разделитель команд. Хотя в первом случае было бы лучше подумать об этом как о завершении утверждения while .

Например, если вы хотите сделать цикл, пока какая-то команда возвращает успех, вы бы сделали что-то вроде

 while test -f /foo; do some_command; done` 

Точка с запятой используется для указания конца аргументов для test . В противном случае это может показаться, что do еще один аргумент для test .

Однако вместо точки с запятой можно использовать символы новой строки. Следующее было бы точно эквивалентно приведенному выше примеру, без каких-либо точек с запятой

 while test -f /foo do some_command done 

Фактически с bash, если вы запустите указанную выше команду, а затем после ее завершения (или вы CTRL + C it), если вы вернетесь в историю (стрелки вверх или еще много чего), вы заметите, что она заменяет многострочный команда с одним, использующим точку с запятой.


Итак, да, синтаксис таких вещей, как if и в while нарушает нормальное поведение оболочки.
Я лично всегда думал, что синтаксис странный, поскольку do выглядит странно. Но вы привыкли к этому.