Назад | Перейти на главную страницу

Интерактивное выполнение кода bash с использованием флага -c

Я пытаюсь запустить фрагмент оболочки с bash переводчик. Используя -c flag позволяет мне вводить команды прямо в командную строку без записи в файл. Это необходимо для моего использования.

Пример работы:

$ bash -c 'free -m'

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

find / -type f -size +50M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }' 

Я подумал, что сработает просто экранирование кавычек:

$ bash -c 'find / -type f -size +50M -exec ls -lh {} \; | awk \'{ print $9 ": " $5 }\''

Но это не работает. Он не выполняет команду.

Кроме того, такая же проблема, мне нужно иметь возможность запускать Node.js из командной строки без записи в файл.

$ node -e 'console.log("hello");'

Вышеуказанное работает, но:

$ node -e 'console.log('hello');'

and

$ node -e 'console.log(\'hello\');'

Оба ломаются.

Идеи? Спасибо.

Попробуй это:

$ bash -c $'find / -type f -size +50M -exec ls -lh {} \; | awk \'{ print $9 ": " $5 }\''

Из man bash:

   Words of the form $'string' are treated specially.  The word expands to string,  with  backslash-escaped
   characters  replaced  as  specified by the ANSI C standard.  Backslash escape sequences, if present, are
   decoded as follows:
          \a     alert (bell)
          \b     backspace
          \e     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \\     backslash
          \'     single quote
          \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
          \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
          \cx    a control-x character