Вчера я упомянул тему с двойным тире в командах. Чтобы в долгий ящик не откладывать давай разберемся, что это за животное такое и как с ним жить.
Я порой вижу, как опытные админы используют команды в консоли следующим образом:
ssh root@bashdayz.ru --
Ты наверняка встречал такое и даже применял бездумно, но что означает это двойное тире? Зачем оно? Сейчас покажу на котиках.
Двойное тире означает «флаги командной строки». Оно указывает ssh или другой команде не пытаться анализировать то, что следует после параметров.
Масло масленное. Погнали на практике покажу, теория нам не интересна!
У меня есть такая команда:
ssh root@bashdayz.ru -- command1 --arg1 --arg2
Приведенный выше синтаксис указывает ssh не пытаться анализировать параметры arg1 и arg2 после символа «–». Это гарантирует, что команда command1 примет arg1 и arg2 в качестве аргументов командной строки и выполнится на удаленном сервере.
Дальше дело за 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
Да и в принципе всё на этом. Важную и полезную тему разобрали, теперь ты знаешь что это за зверюга и как её применять. Ставь лайк, делись с друзьями. Не смею тебя больше отвлекать, пойду дальше дебажить пайплайны. Покеда!








Комментарии