加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash:如何从env var运行命令并在进程名称中显示其值

发布时间:2020-12-15 20:59:53 所属栏目:安全 来源:网络整理
导读:我想在后台运行几个命令.为此,我在我的.bashrc文件中添加了一个函数,该函数在后台运行一个带有参数的命令,并为我想要的命令创建了一些别名. 这是我的.bashrc的一个片段: alias tkdiff="CMD=tkdiff; run_bg"alias meld="CMD=meld; run_bg"# Run command in b
我想在后台运行几个命令.为此,我在我的.bashrc文件中添加了一个函数,该函数在后台运行一个带有参数的命令,并为我想要的命令创建了一些别名.

这是我的.bashrc的一个片段:

alias tkdiff="CMD=tkdiff; run_bg"
alias meld="CMD=meld; run_bg"

# Run command in background
run_bg() {
    $CMD $@ &
}

问题是,当我使用这些命令时,如果我运行jobs命令或其中一个进程完成,我所能看到的只是$CMD $@,而我无法看到实际运行的内容或运行完毕的内容.

例如:

[ ***** ]$meld; meld; meld
[1] 117438
[2] 117439
[3] 117440
[ ***** ]$jobs
[1]   Running                 $CMD $@ &
[2]-  Running                 $CMD $@ &
[3]+  Running                 $CMD $@ &
[ ***** ]$jobs
[1]   Done                    $CMD $@
[2]-  Done                    $CMD $@
[3]+  Done                    $CMD $@
[ ***** ]$

我尝试在没有函数的情况下设置它(别名meld =“meld $@&”),但后来我得到了缺少的参数.我尝试创建一个包含新var中所有内容的字符串,但后来我看到了新的var的名称.我尝试将其重定向到一个文件并将其作为脚本运行,但后来我看到了该文件的名称.我试过exec,但我得到了相同的结果.我尝试使用带参数的函数,但是我遇到了很多错误并没有结果(我可能做错了).

我知道我可以为每个命令编写一个函数,但这是一个糟糕的解决方案,我仍然认为参数为$@.

有没有办法看到变量的内容而不是他们的名字?
是否有更好/更简单的方法使特定命令始终在后台运行?

将Red Hat 6.0与GNOME 2.28.2一起使用.这是我的工作场所,所以我无法切换发行版或类似的东西.

谢谢!

解决方法

我找到了解决方案.这是代码:

alias tkdiff="run_bg /usr/bin/tkdiff"
alias meld="run_bg /usr/bin/meld"

# Run command in background
run_bg {
    eval "$@ &"
}

Eval在运行之前将变量解引用为字符串,因此文本显示完整.
它需要手动输入完整的命令路径,但这已经足够了.

感谢所有试图帮助的人!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读