如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
1)catxxx.sh|sh可以执行从标准输入获取的脚本,但无法传递参数2)用xxx.shabc可以执行带参数的脚本,但是是从文件读取脚本。我现在需要从加密的数据中解密出...
1)cat xxx.sh | sh可以执行从标准输入获取的脚本,但无法传递参数
2)用xxx.sh a b c可以执行带参数的脚本,但是是从文件读取脚本。
我现在需要从加密的数据中解密出一个脚本并执行。因为安全的原因,我不想将脚本保存成文件再执行,以避免留下痕迹。所以需要像1)那样直接执行脚本,但由于脚本有参数,又需要像2)那样可以传递参数给脚本,如何才能实现。
注:我参考了shc,发现shc好像没有考虑到这个问题。
我要实现的是shell加密,原理类似于shc。即先将shell脚本的内容加密成数据,然后写个程序解密出来并直接丢给/bin/sh运行。由于安全方面的原因,不希望将解密出来的脚本中间保存到文件系统。目前使用的方式是用dup2将标准输入重定向,然后将解密出来的shell脚本输出到标准输入,再调用/bin/sh来运行,相当于cat test.sh | sh。结果是可行的。但我那脚本需要传递参考,怎么传递参数就不会了。 展开
2)用xxx.sh a b c可以执行带参数的脚本,但是是从文件读取脚本。
我现在需要从加密的数据中解密出一个脚本并执行。因为安全的原因,我不想将脚本保存成文件再执行,以避免留下痕迹。所以需要像1)那样直接执行脚本,但由于脚本有参数,又需要像2)那样可以传递参数给脚本,如何才能实现。
注:我参考了shc,发现shc好像没有考虑到这个问题。
我要实现的是shell加密,原理类似于shc。即先将shell脚本的内容加密成数据,然后写个程序解密出来并直接丢给/bin/sh运行。由于安全方面的原因,不希望将解密出来的脚本中间保存到文件系统。目前使用的方式是用dup2将标准输入重定向,然后将解密出来的shell脚本输出到标准输入,再调用/bin/sh来运行,相当于cat test.sh | sh。结果是可行的。但我那脚本需要传递参考,怎么传递参数就不会了。 展开
展开全部
sh 绝对路径/xxx.sh 参数1 参数2 参数3........参数n
---------------------------------------------------------------------------------
如果你保存临时文件的话,可以使用xargs
比如脚本文件为1.sh,而参数保存在args文件中,用一个命令得到参数内容
cat args
那么最后可以这样执行
cat args |xargs sh 1.sh
如果不打算保存临时文件,那你只好在脚本中写清楚要如何调用,参数有几个。
比如你使用2.sh调用1.sh,在2.sh 中写清楚
1.sh $arg1 $arg2这样就可以了。
当然脚本中的arg1,arg2也可以是最初的第一个脚本调用传递进来的,也可以是硬编码写死的。
---------------------------------------------------------------------------------
如果你保存临时文件的话,可以使用xargs
比如脚本文件为1.sh,而参数保存在args文件中,用一个命令得到参数内容
cat args
那么最后可以这样执行
cat args |xargs sh 1.sh
如果不打算保存临时文件,那你只好在脚本中写清楚要如何调用,参数有几个。
比如你使用2.sh调用1.sh,在2.sh 中写清楚
1.sh $arg1 $arg2这样就可以了。
当然脚本中的arg1,arg2也可以是最初的第一个脚本调用传递进来的,也可以是硬编码写死的。
展开全部
sh filename1.sh `cat filename2.txt`
·是反引号,esc下面的键
·是反引号,esc下面的键
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sh xxx.sh a b c < file
cat <&0
这样就可以处理标准输入的内容了
cat <&0
这样就可以处理标准输入的内容了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
[root@localhost ~]# cat shift.sh
#!/bin/bash
a=''
b=''
c='ccc'
while [ -n "$1" ]
do
case "$1" in
-a) a="$2"
shift ;;
-b) b="$2"
shift ;;
-c) c="$2"
esac
shift
done
out=${b}_${a}_${c}
echo ${out}
[root@localhost ~]# sh shift.sh -c ccc -b bbb -a aaa
bbb_aaa_ccc
#!/bin/bash
a=''
b=''
c='ccc'
while [ -n "$1" ]
do
case "$1" in
-a) a="$2"
shift ;;
-b) b="$2"
shift ;;
-c) c="$2"
esac
shift
done
out=${b}_${a}_${c}
echo ${out}
[root@localhost ~]# sh shift.sh -c ccc -b bbb -a aaa
bbb_aaa_ccc
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询