2016-01-23 253 views
1

我想在我的当前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脚本中的另一个进程运行命令?

+0

uecap是什么?它在哪里? – bansi

+0

它驻留在另一个进程中。这是一个与另一个shell进程相关的特殊命令。我从该shell运行bash脚本。不知道这是否会解决歧义问题,但将其视为telnet到路由器,然后从那里运行bash脚本。我可以运行bash脚本(驻留在服务器中),但我不知道如何在我的bash脚本中使用telnet命令。 – nader

+0

如果你的意思是作为另一个用户运行命令,你可以使用[sudo](http://linux.die.net/man/8/sudo) – bansi

回答

1

可能你刚刚回答了你自己的问题。由于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注入等)。