Мой сценарий принимает key качестве третьего аргумента, и он может иметь любой тип ввода ... включая символы, на которые жалуется bash.

Мне бы очень хотелось использовать этот одноразовый скрипт прямо из терминала, может кто-нибудь объяснить, как я могу заставить работать мой ввод, если он выглядит так?

>/my/scripts $ python script.py string 123 spe[i@lk;y
/bin/sh: Syntax error: "(" unexpected
y: command not found
>/my/scripts $ python script.py string 123 "spe[i@lk;y"
/bin/sh: Syntax error: "(" unexpected

И да, у меня есть #! usr/bin/env python shebang в моем скрипте.

1 ответ1

1

Скрипт ничего не может сказать bash чтобы он не применял свои обычные правила глобализации и интерполяции. На самом деле, нет способа предотвратить это, хотя вы можете отключить некоторые аспекты (в частности, глобирование и переменную интерполяцию, но не специальное значение, скажем, скобок). Вы должны использовать некоторую форму цитирования.

Тем не менее, ошибка в скобках говорит мне, что он читает ваш Python как скрипт оболочки, что означает, что вы, вероятно, располагаете строку shebang не в том месте. Это должна быть первая строка скрипта (без пустых строк перед ним), она может не начинаться с начальных пробелов, и если ваш пример соответствует тому, что вы на самом деле использовали, то вам не хватает косой черты в /usr/bin/env .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .