Как я могу передать переменную bash буквально без какой-либо интерпретации? - PullRequest
0 голосов
/ 02 марта 2011

У меня есть код Bash следующим образом

python "$TM"

Проблема в том, что $ TM может быть любым символом, включая `символы. Когда $ TM имеет `abc`, bash пытается запустить abc как команду, прежде чем передать ей параметр для python.

Как я могу предотвратить это? Как я могу передать $ TM буквально без какой-либо интерпретации?

ДОБАВЛЕНО

Мне нужно больше объяснений.

Я использую TextMate Bundle Editer, чтобы bash вызывался с буфером ($ TM_SELECTED_TEXT или $ TM_CURRENT_LINE). Буфер - это выбор, который я сделал в редакторе TextMate. Код bash выглядит следующим образом.

#!/bin/bash

if [ -n "$TM_SELECTED_TEXT" ]; then
    TM="$TM_SELECTED_TEXT"
else

if [ -n "$TM_CURRENT_LINE" ]; then
    TM="$TM_CURRENT_LINE"
fi

fi

/usr/bin/python /Users/smcho/smcho/works/prgtask/textmate/repeat.py "$TM"

repeat.py выглядит следующим образом

import sys

inputString = sys.stdin.read().decode('utf-8')
inputString = inputString.rstrip().lstrip()

content = inputString[0:-2]
mark = inputString[-1]

r_num = len(content)
string = "%s\n%s" % (content, mark * r_num)
sys.stdout.write(string)
sys.exit(0)

Если ввод "abc: -", он преобразует строку в "abc \ n ---".

Проблема в том, что если вход содержит символ ``, bash оценивает его перед отправкой в ​​код Python в качестве параметра.

Ответы [ 4 ]

3 голосов
/ 02 марта 2011

Я думаю, вы ошибаетесь.Bash не «расширил» TM, потому что он содержал обратные пометки (это было бы ужасное нарушение безопасности), переменная уже содержит выходные данные команды.Вы должны заключить в кавычки, чтобы избежать замены процесса:

$ TM="`ls`"
$ echo $TM
file1 file2

против:

$ TM="\`ls\`" # or TM='`ls`'
$ echo $TM
`ls`
0 голосов
/ 03 марта 2011

Зачем вообще использовать bash в качестве посредника?

#!/usr/bin/env python

import os

tm = os.environ.get('TM_SELECTED_TEXT', "") or \
     os.environ.get('TM_CURRENT_LINE', "")

и так далее ...

Ваш repeat.py все равно ничего не сделает с этим аргументом.

0 голосов
/ 02 марта 2011
python "$TM"

0 голосов
/ 02 марта 2011

Ваш вопрос немного расплывчатый, но вы пытались проверить, решает ли ваша кавычка $TM для предотвращения разделения слов:

python "$TM"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...