标签: escaping

如何摆脱路径中的“`”(重音/反引号)?

我倾向于在经常使用的文件和文件夹前面加上“重音符号”字符(非移位波浪号、反勾号或普通的旧口音,whathaveyou..),因为它很容易理解,让我来看看按字母顺序排序,同时让我选择在顶部显示一些项目。它运行良好,除非我通过 CLI 或 SSH/SCP 访问这些文件。

如果我尝试运行命令,调用未转义的文件?它让我进入一个交互式会话......例如?

# scp -r dns.local:/`Downloads/CrazyRussianCars/ ~/
?
>
Run Code Online (Sandbox Code Playgroud)

然而,如果我尝试合乎逻辑的解决方案?

# scp -r dns.local:/\`Downloads/CrazyRussianCars/ ~/
?
bash: -c: line 0: unexpected EOF while looking for matching ``'
bash: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

我知道“新”规则是使用像export NOW=$(date)vs export NOW= `date`这样的语法 (实际上,我什至用 SE MD 语法编写后者...),但这与ENV脚本或任何脚本无关。 ..

注意:一个 Mac OS X 环境,但也就是说,GUI 在日常处理这个字符时从来没有遇到过问题,通常,如果终端中出现语法问题,Apple在禁用 GUI 中的行为方面做得非常好......不确定这是否是一个错误,或者处理此类路径的技术是否只是晦涩难懂......但到目前为止,我一直无法找到方式“逃避它”

ssh command-line-interface mac-osx escaping path

14
推荐指数
2
解决办法
3万
查看次数

Apache mod_rewrite 在重定向时对查询字符串进行双重编码

我们在传递查询字符串时遇到了 Apache mod_rewrite 行为的一个奇怪问题(也许是一个错误?)。

为了重现,我们使用默认的 Apache 配置设置了一个干净的 Ubuntu (oneiric) 安装。我们启用了 mod_rewrite,并且在默认站点配置中,我们添加了以下内容:

RewriteEngine on
RewriteRule ^/(.*)$ /r/$1 [R]
Run Code Online (Sandbox Code Playgroud)

为了测试,我们使用 curl:

curl -I 'http://[ubuntu-machine]/a/b%20c?a%20b'
Run Code Online (Sandbox Code Playgroud)

相关输出是:

HTTP/1.1 302 Found
Server: Apache/2.2.20 (Ubuntu)
Location: http://[ubuntu-machine]/r/a/b%20c?a%2520b
Run Code Online (Sandbox Code Playgroud)

如您所见,查询字符串被双重转义,这是错误的。有谁知道我们如何解决这个问题?我们尝试了几件事:

  • 添加 [NE]。这为我们提供了正确的查询字符串,但路径未转义,这会导致新问题。
  • 添加 [NE,B]。这似乎有效,但会导致路径/ab部分之间被转义。
  • 手动取消转义查询字符串。

    RewriteCond %{QUERY_STRING} .*
    RewriteMap unescape int:unescape  
    RewriteRule ^(.*)$          $1?${unescape:%{QUERY_STRING}}
    
    Run Code Online (Sandbox Code Playgroud)

    然而,这意味着我们无法区分查询字符串中的an&和 an 转义&符。

更新:

此错误报告描述了相同的问题。第一条评论链接到一个明显解决问题的提交,但正如 Pieter 在下面所说的,它似乎并没有真正修复。

mod-rewrite escaping querystring apache-2.2

13
推荐指数
1
解决办法
6398
查看次数

使用 ack-grep 搜索文字 ">\"

我正在寻找字面上具有大于字符(“>”)后跟空格后跟反斜杠字符(“\”)的行,即具有以下内容的行:> \

我认为转义会允许这样做,并且对于比它更大的:

  $ ack-grep "\> "

返回包含“>”的行。

但是当我也尝试逃避反斜杠时,我得到:

  $ ack-grep "\> \\"

ack-grep: 无效的正则表达式 '\> \':
正则表达式 m/\> / 中的尾随 \

grep regex escaping

9
推荐指数
2
解决办法
5182
查看次数

如何在systemd单元文件中转义空格?

我的单元文件看起来像这样(已经\x20像文档所说的那样尝试转义空格):

[Unit]
Description=My Service

[Service]
Type=simple
WorkingDirectory=/home/cobra/my\x20service/
ExecStart=/home/cobra/my\x20service/start.sh

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

但是当尝试启动它时,它失败并显示以下消息:

Failed at step CHDIR spawning /home/cobra/my service/start.sh: No such file or directory
myservice.service: main process exited, code=exited, status=200/CHDIR
Run Code Online (Sandbox Code Playgroud)

给出从此错误消息stat返回的路径:

  File: ‘/home/cobra/my service/start.sh’
  Size: 280             Blocks: 8          IO Block: 4096   regular file
Device: 903h/2307d      Inode: 4718912     Links: 1
Access: (0754/-rwxr-xr--)  Uid: ( 1000/   cobra)   Gid: ( 1000/   cobra)
Access: 2015-05-24 22:42:12.702657594 +0200
Modify: 2015-03-27 22:28:05.682531000 +0100
Change: 2015-05-24 22:40:58.830298787 +0200
 Birth: -
Run Code Online (Sandbox Code Playgroud)

我无法从文件名中删除空格,因为我尝试运行的服务出于某种原因需要它们。

我哪里错了?

service escaping systemd

7
推荐指数
2
解决办法
1万
查看次数

如何在 rsyslog 模板中转义或删除双引号

我希望 rsyslog 以 JSON 格式编写日志消息,这需要在字符串周围使用双引号 (")。

问题是有时值本身包含双引号,并且需要转义这些值 - 但我不知道如何做到这一点。

目前我的 rsyslog.conf 包含我使用的这种格式(有点简化):

$template JsonFormat,"{\"msg\":\"%msg%\",\"app-name\":\"%app-name%\"}\n",sql
Run Code Online (Sandbox Code Playgroud)

但是当一个包含双引号的 msg 到达时,JSON 就会被破坏,例如:

user pid=21214 uid=0 auid=4294967295 msg='PAM setcred:
user="oracle" exe="/bin/su" (hostname=?, addr=?, terminal=?
result=Success)'
Run Code Online (Sandbox Code Playgroud)

变成:

{"msg":"user pid=21214 uid=0 auid=4294967295 msg='PAM setcred:
user="oracle" exe="/bin/su" (hostname=?, addr=?, terminal=?
result=Success)'","app-name":"user"}
Run Code Online (Sandbox Code Playgroud)

但我需要它成为:

{"msg":"user pid=21214 uid=0 auid=4294967295 msg='PAM setcred:
user=\"oracle\" exe=\"/bin/su\" (hostname=?, addr=?, terminal=?
result=Success)'","app-name":"user"}
Run Code Online (Sandbox Code Playgroud)

escaping json rsyslog

5
推荐指数
1
解决办法
5073
查看次数

在nginx配置文件中,如何定义一个包含“$”符号的fastcgi_param?

我正在尝试为 PHP 应用程序定义一些环境变量,但其中一个变量包含“$”符号。当我使用 测试配置文件时nginx -t,我收到一条错误消息,告诉我变量不存在。好像把“$”后面的文字解释为变量名,当然没有定义。

也许我没有在正确的地方搜索,但我找不到有关如何转义“$”字符的信息。这可能吗?怎么做?

更新:我尝试在 d3ag0s 的评论之后将值括在单引号和双引号之间,但我收到了相同的错误消息。

configuration nginx fastcgi environment-variables escaping

5
推荐指数
1
解决办法
2985
查看次数

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

我正在尝试使用解释器运行 shell 片段bash。使用该-c标志允许我直接向命令行提供命令,而无需写入文件。这是我的使用所必需的。

工作示例:

$ bash -c 'free -m'
Run Code Online (Sandbox Code Playgroud)

问题是我想要运行的实际 shell 片段中有单引号。

find / -type f -size +50M -exec ls -lh {} \; | awk '{ print $9 ": " $5 }' 
Run Code Online (Sandbox Code Playgroud)

我认为简单地转义引号就可以了:

$ bash -c 'find / -type f -size +50M -exec ls -lh {} \; | awk \'{ print $9 ": " $5 }\''
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。它不执行该命令。

此外,同样的问题,我需要能够从命令行执行 Node.js,而不写入文件。

$ node -e 'console.log("hello");'
Run Code Online (Sandbox Code Playgroud)

上面的方法有效,但是:

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

and

$ node -e 'console.log(\'hello\');'
Run Code Online (Sandbox Code Playgroud)

两者都打破。

有想法吗?谢谢。

linux bash escaping

3
推荐指数
1
解决办法
2845
查看次数

转义键的转义序列

在 SSH 终端上,有一个命令接管终端窗口,它说我可以按 Esc 键结束它。

我的 SSH 终端不处理转义键。Ctrl我可以在其位置使用的转义序列(+something)是什么。(或者有没有)

我可以断开 SSH 连接并再次连接,但我想我会继续检查是否有转义键的转义序列。这甚至会起作用吗?

ssh terminal escaping

2
推荐指数
1
解决办法
1934
查看次数

在 CMD shell 中正确转义带有空格的路径

我有以下路径:

“d:\workspace\Server 主干 - CI\make\make & publish.bat”

但是,当我尝试从 cmd shell 执行此操作时,出现错误:

'd:\workspace\Server' 不是内部或外部命令,也不是可运行的程序或批处理文件。

我究竟做错了什么?有没有办法正确地逃离这些空间?

windows windows-command-prompt escaping

2
推荐指数
1
解决办法
3万
查看次数

sed 替换文本 - 转义字符

我有一个 mysqldump 文件,我想在其中替换以下文本<a href="/tag/<a href="http://www.mydomain.com/tag/但找不到正确转义所有特殊字符的方法。

我正在使用以下命令(+ 一些其他变体),
cat wordpress_posts.sql | sed 's%/<a href="\/\tag\/\/<a href="\http:/\/\www.mydomain.com/\tag/\/%g' > wordpress_posts_new.sql
但它不起作用。

有人可以帮忙吗?

更新 1:结果是 mysqldump 中的源字符串不是<a href="/tag/<a href=\"/tag/(注意等号后面的额外反斜杠)
这是 SQL 文件的一行的 pastebin,其中包含我要替换的字符串:http://pastebin .com/8G5mcxpJ

我尝试了 sed 命令的所有 3 个建议版本,但没有一个会替换上面的字符串<a href=\"http://www.mydomain.com/tag/ (是的,我在等号后添加了反斜杠)

linux replace escaping sed search-and-replace

-1
推荐指数
1
解决办法
1万
查看次数