【问题标题】:In Ubuntu, how do I make an alias inside a bash for loop?在 Ubuntu 中,如何在 bash for 循环中创建别名?
【发布时间】:2015-12-26 04:14:43
【问题描述】:

我有一个脚本可以帮助我测试并发性。我使用屏幕一次运行一堆东西。但在这一切中,我无法弄清楚如何使用 for $i 变量创建别名(或函数?)。

#!/bin/bash
# alias p='. ./p.sh'

# Run a bunch of apps in separate screens.

export NUM_MUS=3
for (( i = 1; i <= $NUM_MUS; ++i ))
do
   echo $i
   cd ~/mutest/mu$i
   screen -mS mu$i -h 10000 ./app

# How do I make an alias to let me easily access each screen?
# None of these work.
#
#   alias mu$i='screen -dr mu$i'
#   eval
#   function mu$i () { screen -dr mu$i }

   # ^AD to get out
done

# Have a way of killing them all.

function mustop ()
   {
   for (( i = 1; i <= $NUM_MUS; ++i ))
   do
      screen -r mu$i -X quit
   done
   screen -ls
   }

请注意,我问的不是参数。我不想要参数......除非有办法让它与参数一起工作?

...

好的,我可以添加这一行,它会“足够好”

function mu { screen -dr mu$1 }

但它仍然没有回答我使用 for 循环变量来制作一堆别名/函数的问题。我并不是说这是最聪明的做事方式,但如果我确实想这样做,我该怎么做?

【问题讨论】:

    标签: bash variables ubuntu for-loop alias


    【解决方案1】:

    变量在双引号内展开,而不是在单引号内。

    alias mu$i="screen -dr mu$i"
    

    另外,请确保您使用 source scriptname 运行脚本,这样别名将在您的原始 shell 中定义,而不仅仅是执行脚本的 shell。

    【讨论】:

    • 嗯,解决了!为什么在我涉过的解释如何使用别名的任何页面和页面中都没有提到这一点?
    • 它不是特定于别名的,对于 shell 中任何地方的字符串都是如此。
    • 嗯。我第一次意识到这一点。所以它就像 PHP 那样。
    • 情况正好相反。我认为 PHP 是从 Perl 复制的,Perl 是从 shell 复制的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多