Я пытаюсь запустить фрагмент оболочки с 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