【问题标题】:Run command from current terminal in bash script在 bash 脚本中从当前终端运行命令
【发布时间】:2016-04-29 18:51:19
【问题描述】:

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

【问题讨论】:

  • 什么是uecap,它位于何处?
  • 它驻留在另一个进程中。它是与另一个 shell 进程相关的特殊命令。我从那个 shell 运行 bash 脚本。不确定这是否会解决歧义,但可以将其视为 telnet 进入路由器,然后从那里运行 bash 脚本。我可以运行 bash 脚本(驻留在服务器中),但我不确定如何在我的 bash 脚本中使用 telnet 命令。
  • 如果您想以其他用户身份运行命令,您可以使用sudo
  • 嗨,bansi 希望这能澄清我想要做什么
  • 是的,uecap 命令是一个别名。

标签: bash shell unix


【解决方案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 注入等)。

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2012-10-24
    • 2021-10-24
    • 2023-04-04
    • 2019-04-01
    • 2021-11-27
    相关资源
    最近更新 更多