文档中心 > 云服务器 ECS

云服务器 ECS Linux 执行命令会导致实际执行的是历史命令

更新时间: 访问次数:2215

问题描述


具体现象是。比如,执行如下指令:

  
  
  1. curl "http://xxxx.com/bao/uploaded/i3/2245429602/TB24JupcFXXXXaAXXXXXXXXXXXX_!!2245429602.jpg"

但实际执行的却是::

  
  
  1. curl "http://xxxx.com/bao/uploaded/i3/2245429602/TB24JupcFXXXXaAXXXXXXXXXXXX_wget "http://xxxx.com/bao/uploaded/i3/2245429602/TB24JupcFXXXXaAXXXXXXXXXXXX_ls2245429602.jpg"2245429602.jpg"

问题原因


执行的命令中包含字符,该字符在 shell 里面是特殊字符,指的是执行历史命令。

处理办法


如果要让等特殊字符不转义的话,需要在前面加个\ 比如:

  
  
  1. curl "http://xxxx.com/bao/uploaded/i3/2245429602/TB24JupcFXXXXaAXXXXXXXXXXXX_\!\!2245429602.jpg" #这个样就不会转义了。

 

另外,Linux 的 shell 下常用的元字符说明:

字符 说明
IFS 三者之一组成(我们常用 space )。
CR 产生。
= 设定变量。
$ 作变量或运算替换(请不要与 shell prompt 搞混了)。
> 重导向 stdout。
< 重导向 stdin。
| 命令管线。
& 重导向 file descriptor ,或将命令置于背境执行。
( ) 将其内的命令置于 nested subshell 执行,或用于运算或命令替换。
{ } 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。
; 在前一个命令结束时,而忽略其返回值,继续执行下一个命令。
&& 在前一个命令结束时,若返回值为 true,继续执行下一个命令。
|| 在前一个命令结束时,若返回值为 false,继续执行下一个命令。
! 执行 history 列表中的命令。*

 

如问题还未解决,请联系售后技术支持 

 

 

FAQ

关于此文档暂时还没有FAQ
返回
顶部