使用 -c 标志以交互方式执行 bash 代码

使用 -c 标志以交互方式执行 bash 代码

我正在尝试使用解释器运行 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

相关内容