🖥 Двойные тире в командах Linux 🐧
Порой опытные админы используют команды в консоли следующим образом:
ssh [email protected] --
Что означает это двойное тире? Зачем оно? Давайте разбираться.
Двойное тире означает «флаги командной строки». Оно указывает ssh или другой команде не пытаться анализировать то, что следует после параметров. На словах выглядит не очень, давайте посмотрим на практике!
У меня есть такая команда:
ssh [email protected] -- command1 --arg1 --arg2
Приведенный выше синтаксис указывает ssh не пытаться анализировать параметры arg1 и arg2 после символа «--». Это гарантирует, что команда command1 примет arg1 и arg2 в качестве аргументов командной строки и выполнится на удаленном сервере.
Короче говоря мы сообщаем ssh - все то, что идет после двойного тире, это не твои параметры и аргументы, анализировать это НЕ НАДО! СТОП! Дальше дело за command1 и его параметрами и аргументами.
Двойное тире обрабатывается не обрабатывается оболочками bash/zsh/csh/sh/fish и т.п. Оно обрабатывается средствами самих программ, но НЕ всех. Например ssh это умеет делать, как и множество других команд и утилит. Рассмотрим другие примеры.
Например, вы не сможете просмотреть файл с именем --file или -f используя команду cat. Проверяем:
cat --file
cat -f
Опа. Ошибка! cat: unrecognized option --file/f. Давайте теперь передадим двойное тире:
cat -- --file
cat -- -f
Ошибка пропала и файл успешно вывелся на экран, ну либо выскочило сообщение cat: --file/f: No such file or directory. Это нормально.
Закрепим:
rm --file = получим ошибку
rm -- '--file' = а вот это сработает
Ну а что бы передать параметры в rm, делаем так:
rm -v -i -- '--file'
rm -f -v -i -- '-f'
Просто, логично, мелодично. Но как я и сказал выше, не все команды умеют работать с двойным тире. Например, команда echo, на все попытки подружить её с двойным тире, просто-напросто провалятся:
/usr/bin/echo -- -n
echo -- --test
выведется это:
-- -n
-- --test
Если материал оказался полезным и интересным, то поставьте лайк. Если остались вопросы, то напиши их в комментариях 💬
Порой опытные админы используют команды в консоли следующим образом:
ssh [email protected] --
Что означает это двойное тире? Зачем оно? Давайте разбираться.
Двойное тире означает «флаги командной строки». Оно указывает ssh или другой команде не пытаться анализировать то, что следует после параметров. На словах выглядит не очень, давайте посмотрим на практике!
У меня есть такая команда:
ssh [email protected] -- command1 --arg1 --arg2
Приведенный выше синтаксис указывает ssh не пытаться анализировать параметры arg1 и arg2 после символа «--». Это гарантирует, что команда command1 примет arg1 и arg2 в качестве аргументов командной строки и выполнится на удаленном сервере.
Короче говоря мы сообщаем ssh - все то, что идет после двойного тире, это не твои параметры и аргументы, анализировать это НЕ НАДО! СТОП! Дальше дело за command1 и его параметрами и аргументами.
Двойное тире обрабатывается не обрабатывается оболочками bash/zsh/csh/sh/fish и т.п. Оно обрабатывается средствами самих программ, но НЕ всех. Например ssh это умеет делать, как и множество других команд и утилит. Рассмотрим другие примеры.
Например, вы не сможете просмотреть файл с именем --file или -f используя команду cat. Проверяем:
cat --file
cat -f
Опа. Ошибка! cat: unrecognized option --file/f. Давайте теперь передадим двойное тире:
cat -- --file
cat -- -f
Ошибка пропала и файл успешно вывелся на экран, ну либо выскочило сообщение cat: --file/f: No such file or directory. Это нормально.
Закрепим:
rm --file = получим ошибку
rm -- '--file' = а вот это сработает
Ну а что бы передать параметры в rm, делаем так:
rm -v -i -- '--file'
rm -f -v -i -- '-f'
Просто, логично, мелодично. Но как я и сказал выше, не все команды умеют работать с двойным тире. Например, команда echo, на все попытки подружить её с двойным тире, просто-напросто провалятся:
/usr/bin/echo -- -n
echo -- --test
выведется это:
-- -n
-- --test
Если материал оказался полезным и интересным, то поставьте лайк. Если остались вопросы, то напиши их в комментариях 💬