我正在尝试使用解释器运行 shell 片段bash
。使用该-c
标志允许我直接在命令行中提供命令,而无需写入文件。这是我的使用要求。
工作示例:
$ bash -c 'free -m'
问题是我想要运行的实际 shell 片段中有单引号。
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\');'
兩者皆斷。
有想法吗?谢谢。
答案1
尝试这个:
$ 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