解决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. ...
随机推荐
- 2015 Multi-University Training Contest 3 1001 Magician
Magician Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5316 Mean: n个数,2种操作,1是单点更新,2是询问区间 ...
- Android开发人员必备的10个开发工具
工欲善其事,必先利其器,Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. 1.Eclipse ADT E ...
- ubuntu安装wineqq遇到错误
在安装中发生了错误:Errors were encountered while processing: wine-qqintl 原因是还有lib没有配置,所以再输入sudo apt-get insta ...
- vue-cli打包构建时常见的报错解决方案
报错1:vue-cli项目本地npm run dev启动后,chrome打开是空白页 解决方案:将config下的index.js中的assetsPublicPath路径都设置为‘/’绝对路径 报错2 ...
- Java8:使用 Optional 处理 null
写过 Java 程序的同学,一般都遇到过 NullPointerException :) —— 为了不抛出这个异常,我们便会写如下的代码: User user = getUserById(id); i ...
- django admin后台css样式丢失
尼玛 坑爹啊 怎么光秃秃的,跟人家的不一样啊 打开firebug 发现报错,找不到css 通过google找到原因,是因为admin所需的js ,css等静态文件虽然都在django的安装目录内,但是 ...
- ios开发之 -- 5分钟集成融云的客服功能
最近项目中遇到了客服的功能,首先想到的就是使用融云的功能,因为以前做的即时通讯的项目,用的都是融云的sdk,花了点时间研究了下,希望能帮到大家! 废话不多说,步骤如下: 一.申请融云账号 二.创建应用 ...
- ArcGIS -- ArcSDE Lock request conflicts with an established lock
1.查询下列表是否有数据 select * from sde.state_locks; select * from sde.object_locks; select * from sde.layer_ ...
- zookeeper未授权访问漏洞
1.什么是zookeeper? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交 ...
- 六 Android Studio打包Eegret App (解决开机黑屏问题)
因为android studio中的SplashActivity并没有什么卵用,只是开机1s显示开机画面,1s后面还是黑屏. 在主文件中加入以下代码,就是开始游戏时显示一个居中填满屏幕的图片,游戏加载 ...