解决shell脚本参数传递含有空格的问题
有这样一个py文件,需要传一个字典作为参数:
import json
import sys
def parse_params(data):
json_data = json.loads(data[1])
print json_data if __name__=='__main__':
params = sys.argv
print params
parse_params(params)
命名为sp.py,运行的时候传入如下参数:
#python sp.py '{"mode":"1","cdCmd":"cd src/test"}'
['sp.py', '{"mode":"1","cdCmd":"cd src/test"}']
{u'cdCmd': u'cd src/test', u'mode': u''}
ok,没问题。但是想写shell脚本通过变量的方式传入参数,这时遇到了问题。
shell脚本如下:
mode=""
cdCmd="cd src/test"
python sp.py '{"mode":"'$mode'","cdCmd":"'$cdCmd'"}'
运行结果如下:
#./test.sh
['sp.py', '{"mode":"1","cdCmd":"cd', 'src/test"}']
Traceback (most recent call last):
File "sp.py", line , in <module>
parse_params(params)
File "sp.py", line , in parse_params
json_data = json.loads(data[])
File "/usr/local/python27/lib/python2.7/json/__init__.py", line , in loads
return _default_decoder.decode(s)
File "/usr/local/python27/lib/python2.7/json/decoder.py", line , in decode
obj, end = self.raw_decode(s, idx=_w(s, ).end())
File "/usr/local/python27/lib/python2.7/json/decoder.py", line , in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line column (char )
发现很奇怪,cdCmd变量被分割成了两个参数:"cdCmd":"cd', 'src/test"。
上网查阅资料后发现是因为shell会把空格作为分隔符,所以成了两个变量。这个问题目前找到两个解决办法:
1.可以通过修改环境变量IFS来实现,默认IFS是空,改成别的字符即可。
2.加引号也可是实现带空格参数的传递,修改shell脚本如下:
mode=""
cdCmd="cd src/test"
python sp.py '{"mode":"'$mode'","cdCmd":"'"$cdCmd"'"}'
运行结果:
# ./test.sh
['sp.py', '{"mode":"1","cdCmd":"cd src/test"}']
{u'cdCmd': u'cd src/test', u'mode': u''}
解决shell脚本参数传递含有空格的问题的更多相关文章
- shell脚本参数中有空格
shell脚本参数中有空格 在shell脚本中如果有空格的处理如下: sh test.sh "hello word" echo $1 得到的是hello,而不是hello word ...
- Shell脚本传递带有空格的参数
在另一博文<Shell脚本实现DB2数据库表导出到文件>中实现了通过脚本实现将DB2数据库导出到文件,需要传入七个参数,最后一个是一个带有空格字符串,所以传入的时候有点问题,会自动识别空格 ...
- 如何解决 shell 脚本重复执行的问题
在开发过程中,经常会使用shell脚本去完成定时备份的任务,普遍的做法是通过系统的定时任务定时执行备份脚本 设想这样一种场景,本次备份时间到了,自动执行备份脚本,如果备份比较耗时的话,会一直持续到下一 ...
- 解决shell脚本“syntax error near unexpected token `fi'”的问题。
执行shell脚本的时候,提示如下错误: 查询资料后发现: 执行: vi finddir.sh 然后,输入 :set ff 结果是: 解决方案就是,修改为unix: :set ff=unix 执行保存 ...
- shell脚本传递带有空格的参数的解决方法
如下例子所示: #!/bin/sh dt= rdms_presql='select * from dm_general_stat where dimcode = "day" and ...
- Shell脚本传递带有空格的参数[摘录自网络]
参数处理 说明 $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$#相同,但是使用时加引号,并在 ...
- 【Linux】shell脚本参数传递
这里介绍参数传递的两种方式. 方式一:$0,$1,$2... 采用$0,$1,$2..等方式获取脚本命令行传入的参数 $0:脚本名称 $1....: 参数 例子: #编写一个shell $ vim t ...
- tips: javascript 参数传递含有空格怎么办?
js 方法传参有时候会遇到空格,空格会报错,因为它会默认空格后是元素 解决方法就是使用 escape 和 unescape html: var title = escape(rowObject.tit ...
- 解决shell脚本中 echo 怎么写入换行到文件
測试环境:ubuntu12.04 LTS版本号 echo >> file.txt就可以, 这样的方法对于脚本开头是bash和sh效果都一样, 而echo -e >> file. ...
随机推荐
- linux 测试工具
最近在寻找linux的测试工具,试用了一些.记录如下. memtester 内存测试工具,通过对内存进行读写进行测试.可以对同一块空间进行多次的读写. 源码分析 http://www.cnblogs. ...
- ti8168平台的tiler memory
DM8168 DMM/TILER简介 1.概述 如图4-1,DMM定位在SDRAM控制器的前端,是所有initiator产生的内存存取的接口. 动态内存管理器DMM,是一个专门的管理模块,广义上说,包 ...
- Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询
Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...
- axios如何进行跨域以及对返回格式为回调函数字符串的处理
自从vue2.0开始不对vue-resouce进行维护了,转而用axios进行代替,axios的官方文档写的很详细,附上链接一枚:http://www.jianshu.com/p/df464b26ae ...
- vue2.0中子组件通过v-modal改变父组件中的值
父组件代码: <template lang="pug"> div p this is father child(v-model="data") &l ...
- iOS UIWebView 获取内容实际高度,关闭滚动效果
本文转载至 http://my.oschina.net/Khiyuan/blog/341535 iOS UIWebView 获取内容实际高度,关闭滚动效果 近期做东西,将 UIWebView 嵌套 ...
- Spring学习笔记--使用注解装配
使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的 ...
- POI读写大数据量EXCEL
另一篇文章http://www.cnblogs.com/tootwo2/p/8120053.html里面有xml的一些解释. 大数据量的excel一般都是.xlsx格式的,网上使用POI读写的例子比较 ...
- python 绘制3D散点图
import scipy.io as sio from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt a = [ ...
- HDU1080(DP)
我用的dp是n^3的, dp[i][j] 表示在s串的i个前和t串的j个前,s[i],t[j]为最末端的两个串得到的最大值. 状态转移方程为: 之前将s和t串最尾端添加'-' ;i<=n;i++ ...