Я порой вижу, как опытные админы используют команды в консоли следующим образом:
ssh root@bashdayz.ru --Ты наверняка встречал такое и даже применял бездумно, но что означает это двойное тире? Зачем оно? Сейчас покажу на котиках.
Двойное тире означает «флаги командной строки». Оно указывает ssh или другой команде не пытаться анализировать то, что следует после параметров.
Масло масленное. Погнали на практике покажу, теория нам не интересна!
У меня есть такая команда:
ssh root@bashdayz.ru -- command1 --arg1 --arg2Приведенный выше синтаксис указывает ssh не пытаться анализировать параметры arg1 и arg2 после символа «--». Это гарантирует, что команда command1 примет arg1 и arg2 в качестве аргументов командной строки и выполнится на удаленном сервере.
Короче говоря мы сообщаем ssh - все то, что идет после двойного тире, это не твои параметры и аргументы, анализировать это НЕ НАДО! СТОП! Дальше дело за command1 и его параметрами и аргументами.
Двойное тире обрабатывается нифига не оболочками bash/zsh/csh/sh/fish и т.п. Оно обрабатывается средствами самих программ, но НЕ всех. Например ssh это умеет делать, как и множество других команд и утилит.
Рассмотрим другие примеры. Например, ты не сможешь просмотреть файл с именем
--file или -f используя команду cat. Проверяем:cat --fileОпа. Ошибка! cat: unrecognized option --file/f. Давай теперь передадим двойное тире:
cat -f
cat -- --fileЕее! Ошибка пропала и файл успешно вывелся на экран, ну либо выскочило сообщение cat: --file/f: No such file or directory. Это нормально.
cat -- -f
Закрепим:
rm --file = получим ошибкуНу а что бы передать параметры в rm, делаем так:
rm -- '--file' = а вот это сработает
rm -v -i -- '--file'Просто, логично, мелодично. Но как я и сказал выше, не все команды умеют работать с двойным тире. Например, команда echo, на все попытки подружить её с двойным тире, просто-напросто провалятся:
rm -f -v -i -- '-f'
/usr/bin/echo -- -nвыведется это:
echo -- --test
-- -nДа и в принципе всё на этом. Важную и полезную тему разобрали, теперь ты знаешь что это за зверюга и как её применять. Ставь лайк, делись с друзьями. Не смею тебя больше отвлекать, пойду дальше дебажить пайплайны. Покеда!
-- --test
tags: #bash
—
💩 @bashdays