Почему каталог env вызывается перед echo?

просто перейдите в / sys / etc / default / grub

и измените эту строку: GRUB_CMDLINE_LINUX_DEFAULT = "quiet" на GRUB_CMDLINE_LINUX_DEFAULT = "- 1"

сохраните файл и выполните update-grub

, это решит вашу проблему

3
12.05.2017, 01:21
2 ответа

/usr/bin/env, за которым следует имя программы, выполняет эту программу. Он ищет имя программы как исполняемый файл в каталогах, настроенных переменной окружения PATH. Это особый случай использования env: за env следуют некоторые назначения переменных среды, а затем имя программы и аргументы — здесь происходит нулевое назначение переменных.

/usr/bin/env echo … эквивалентно /bin/echo …, за исключением того, что путь к echo жестко не закодирован — в зависимости от в системе и значении PATH это может быть /bin/echo, /usr/bin/echo, /usr/xpg4 /echo, /usr/ucb/echo, /usr/local/bin/echo, /home/bob/bin/echo, …

Почти каждая оболочка имеет встроенную команду echo. Поведение встроенной команды оболочки и внешней команды может отличаться. На практике существуют различия между командами echo в двух отношениях: что произойдет, если первый аргумент начинается с - (некоторые версии echo обрабатывают несколько параметров) , и как обрабатывается обратная косая черта (некоторые версии печатают ее буквально, другие рассматривают как управляющий символ). Таким образом, форсирование версии echo полезно иногда, когда вы хотите использовать это зависящее от реализации поведение. В большинстве случаев вместо этого лучше использовать printf — printf может делать все то же, что и echo, и переносим, ​​кроме антиквариата.

С аргументами, переданными в вашем образце кода, выбор реализации эха не имеет значения. Если в этом безумии есть смысл, для его выяснения потребуется гораздо больше контекста.

2
27.01.2020, 21:21

Я понимаю, что system() просто запускает команду.

Верно.

Обычно это было бы просто «эхо и что теперь».

У вас отсутствует последний символ.

Но почему перед ним стоит «/usr/bin/env»?

Это полный путь к команде env, которая затем выполняется вместо команды echo.

Что именно это делает?

Он предотвращает выполнение встроенной команды echo оболочкой, порожденной system функцией libc, поэтому исполняемый файл echo впервые находится в PATH. вместо этого используется. В зависимости от соответствующих реализаций echo поведение может отличаться, хотя я не вижу здесь ничего особенного. В обоих случаях "и что теперь?" должен быть напечатан, если вам не повезло и у вас есть файл, имя которого из пяти букв начинается с «что», например, «whatz» в вашем текущем каталоге. Если это так, то будет напечатано:

и теперь whatz

1
27.01.2020, 21:21

Теги

Похожие вопросы