在bash脚本中从当前终端运行命令

时间:2016-01-23 02:58:15

标签: bash shell unix

我想在我当前的shell中发出一个命令(我从那里运行我的bash脚本)。因为我现在将uecap命令放在我的bash脚本中是正确的。脚本失败,找不到原因uecap命令。

虽然如果我直接从我当前的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脚本中的另一个进程运行命令?

1 个答案:

答案 0 :(得分: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注入等)。