在bash脚本中从当前终端运行命令
问题描述:
我想在我的当前shell(我从中运行我的bash脚本)中发出命令。现在,如果我把uecap命令放在我的bash脚本中就好了。脚本失败,找不到原因uecap命令。在bash脚本中从当前终端运行命令
虽然如果我直接从我当前的shell发出uecap命令,它工作正常。
我当前的shell是在一个单独的进程,它是自己的进程ID。
,这里是我的bash shell为例:
#!/bin/sh
while read i
do
cid=`echo "$i" | cut -b1`
rid=`echo "$i" | cut -b9-18`
rm -rf $1_TEMP
uecap -r rid -c cid
done < $1ID.log
我运行bash脚本的方法是通过发出以下命令:
!./bashscript $node.
在不一样的,是有办法使用bash脚本中的另一个进程运行命令?
答
可能你刚刚回答了你自己的问题。由于uecap是别名,因此它不会被导出到交互式shell发出的进程中,并且您不能强制它们使用shell来导出它,因为别名没有export
命令。
你可以做的是什么,从你的脚本中创建包含别名定义,然后源不是文件的文件,像这样:
alias uecap > ~/tmp/uecap_alias
和shell脚本中
source ~/tmp/uecap_alias
...
uecap -r rid -c cid
您也可以尝试通过环境变量传递uecap别名定义,如
UECAP_ALIAS="$(alias uecap)" ./your_shell_script
和脚本
eval "$UECAP_ALIAS"
...
uecap ...
但要注意eval "$VAR"
是空格,报价和怪异的符号相当脆弱,所以应该特别小心使用,并且只有当你100%地肯定你”内重新进入eval
(想到SQL注入等)。
uecap是什么?它在哪里? – bansi
它驻留在另一个进程中。这是一个与另一个shell进程相关的特殊命令。我从该shell运行bash脚本。不知道这是否会解决歧义问题,但将其视为telnet到路由器,然后从那里运行bash脚本。我可以运行bash脚本(驻留在服务器中),但我不知道如何在我的bash脚本中使用telnet命令。 – nader
如果你的意思是作为另一个用户运行命令,你可以使用[sudo](http://linux.die.net/man/8/sudo) – bansi