LINUX.ORG.RU

Допустимы ли символы & и | в аргументах программы?

 , , ,


0

2

Если я буду использовать в аргументах командной строки своей программы символы & (как логическое И) и | (как логическое ИЛИ) - это создаст какие-либо проблемы при использовании в linux?

Ответ на: комментарий от sin_a

придётся параметры заключать в кавычки

Или бэк-слэшить. Я просто думал - а какие, собственно, безгеморройные альтернативы существуют? И сходу как-то ничего не придумалось…

bugfixer ★★★★★
()
Последнее исправление: bugfixer (всего исправлений: 2)

Блин, дерьмово.

alex1101
() автор топика
Ответ на: комментарий от bugfixer

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

Stil ★★★★★
()
Ответ на: комментарий от Stil

А, так проблемы будут только если программа сама на баше? В остальных случаях шелл нормально отработает?

alex1101
() автор топика
Ответ на: комментарий от alex1101

В остальных случаях шелл нормально отработает?

Нет, это спец-символы для шелла - экранировать на callsite придётся так или иначе.

bugfixer ★★★★★
()

В аргументах программы допустимы, но для shell они имеют специальное значение и при запуске из shell или чем-то, что использует shell(например пхпшный system()) их нужно экранировать

cobold ★★★★★
()
Ответ на: комментарий от cobold

То есть даже просто открыть Konsole и скомандовать progname arg1 & arg2 & arg3 не получится, придётся экранировать? Эх блин, я думал, шелл берёт нулевой аргумент (название проги) и передаёт ей управление, и что там дальше в команде - его уже не колышет.

alex1101
() автор топика
Ответ на: комментарий от alex1101

Эх блин, я думал

Чует мое сердце - ждёт Вас много открытий чудных ;) Настоящая развлекуха начинается когда нужно удалённо через несколько hoops команды сабмитить, там и \\ и \\\\ и даже \\\\\\\\ не редкость ;)

ПыСы: спешу заметить - ЛОР половину моих backslashes съел ;) Хозяйке на заметку.

bugfixer ★★★★★
()
Ответ на: комментарий от alex1101

Те же яйца - вид сбоку.

ПыСы. Ой, я ничего не нарушил?

bugfixer ★★★★★
()
Ответ на: комментарий от alex1101

progname arg1 and arg2 and arg3 or arg4 <= ипольбуй воэта
progname arg1 и arg2 и arg3 или arg4
progname "arg1 & arg2 & arg3 | arg4"
progname 'arg1 & arg2 & arg3 | arg4'

Или пусть твоя программа принимает файл на вход и читает от туда аргументы. Или через трубу

cat myargs | progname

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Ответ на: комментарий от x905

Когда

progname arg1 arg2 arg3

программа выводит результаты, которые удовлетворяют хотя бы одному из arg, а когда

progname arg1 & arg2 & arg3

программа выводит результаты, которые удовлетворяют всем arg вместе.

alex1101
() автор топика
Ответ на: комментарий от nicholas_ru

В принципе, можно сделать синтаксис sql-подобным. Просто лишние символы набирать лень)

alex1101
() автор топика
Ответ на: комментарий от alex1101

я думал, шелл берёт нулевой аргумент (название проги) и передаёт ей управление

Все, что скармливается шеллу это программа на языке шелла, которая исполняется самим бинарником шелла. Вот как пистон, только шелл) И оно не прибито к линуксу, народ удивляется, почему нельзя использовать синтаксис шелла в кронтабе или там в системд юнитах)

goingUp ★★★★★
()
Ответ на: комментарий от alex1101

Ты про plocate или mlocate? А то они как бы по-разному работают.

Ja-Ja-Hey-Ho ★★★★★
()
Ответ на: комментарий от alex1101

Ну тогда можно разбить запрос на две фиксированные части, сначала идёт список аргументов через пробел, подразумевая что обязательные параметры запроса, затем идёт любой допустимый разделитель, да хоть запятая и всё что за ней включая тоже список разделённых пробелом это список или. Но опять же можно просто обернуть то что ты хочешь в кавычки целиком и всё. А уж там в программе разберёшь аргумент. Очень часто приходится программам кавычки делать. Либо муторно пердолить и экранировать отдельные символы либо в кавычки обернуть, второе вполне себе удобно. Или возми два других символа которые можно использовать, например косую черту в качестве «или», а в качестве «и» просто пробелы оставь или наоборот

locate word1/word2 world3 найти всё где есть world3 и word1 или word2

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от alex1101

Если прям наглядно надо чтобы было то типа такого

locate world3+world4+world5 word1/word2/worldX

Типа у тебя сразу две группы, группа ИЛИ и группа И, найти все слова что идут через + и что-то из из того что идёт через / ну или типа, просто в файлике поиграть с вариантами и выбрать что понравится, запятую там, знак подчёркивания, тире,

LINUX-ORG-RU ★★★★★
()

Как вариант: экранировать все символы

novus ★★
()
Ответ на: комментарий от alex1101

progname arg1 arg2 arg3

Программа получает аргументы. А чему удовлетворять и что выводить она решает внутри сама.

Фактически у тебя, в первом случае - три аргумента, во втором случае - пять. Пусть при трех аргументах выполняет «или», при четырех - «и».

andytux ★★★★★
()
Ответ на: комментарий от thesis

Да, тоже вариант. Тем более, всякие префиксные символы и так используются в синтаксисе.

alex1101
() автор топика
Ответ на: комментарий от alex1101

Тут неплохо бы изучить, как другие подобные продукты принимают запрос с командной строки. Find там, recoll, notmuch, tracker. Подумать, стоит ли ввязываться.

akho
()

Прочитал всё что советуют и так и не понял, чем не устраивают кавычки? Простой, понятный и стандартный вариант.

Loki13 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.