解决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. ...
随机推荐
- php接入域账号登陆代码
php接入域账号登陆代码 //替换本地登录为AD域用户认证//edit by ZhangJin on 2015-05-23 -START-$dn = $user_account.'@fun ...
- [android] AndroidManifest.xml - 【 manifest -> Application -> activity 】
<activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetai ...
- C++ 函数的扩展③--函数重载
//函数扩展--函数重载(C语言不支持函数重载) #include<iostream> using namespace std; //函数重载在本质上是相互独立的不同函数(静态链编),在c ...
- Servlet中Request的getAttribute getParameter 区别
1.从更深的层次考虑,request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据. request.getParameter()方法返回Str ...
- Mongodb的性能优化问题
摘要 数据库性能对软件整体性能有着至关重要的影响,对于Mongodb数据库常用的性能优化方法主要有: 范式化与反范式化: 填充因子的使用: 索引的使用: 一. 范式化与反范式化 范式是为了消除重复数据 ...
- JAVA在语言级支持多线程
进程:任务 任务并发执行是一个宏观概念,微观上是串行的. 进程的调度是有OS负责的(有的系统为独占式,有的系统为共享式,根据重要性,进程有优先级). 由OS将时间分为若干个时间片. JAVA在语言级支 ...
- java----序列化与反序列化中及java序列化本质就是存储一个对象,然后在其他地方在调用它
Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...
- NANDflash和NORflash的区别(设计师在使用闪存时需要慎重选择)
NANDflash和NORflash的区别(设计师在使用闪存时需要慎重选择) NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底 ...
- typecho篇
百度百科的介绍: Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴. Typecho基于PHP5开发,支持多种数据库,是一款内核强健﹑扩展 方便﹑体验友好﹑运行流畅的轻量级开 ...
- xdebug常用配置
;指定xdebug文件 zend_extension = "F:\tools\develop_tools\php\php_xdebug-2.2.2-5.4-vc9.dll" ;xd ...