繁体   English   中英

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

[英]Run command from current terminal in bash script

我想发出一个当前外壳中可用的命令(我从中运行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脚本中的另一个进程来运行命令?

您可能已经回答了自己的问题。 由于uecap是一个别名,因此它不会导出到您的交互式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注入和一样)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM