Bash 如何运行目录中除自身之外的所有脚本?

Bash 如何运行目录中除自身之外的所有脚本?,bash,shell,scripting,loops,command,Bash,Shell,Scripting,Loops,Command,我的OS X工作站上有一个文件夹,里面有*.command文件 (对于那些不知道的人,*.command文件只是在专用终端窗口中启动和运行的shell脚本) 我已经将这个文件夹拖到我的Dock上,以使用“堆栈”,这样我就可以通过几次单击方便地访问和启动这些脚本 我想向堆栈中添加一个新的“run all.command”脚本,该脚本在同一堆栈中运行所有*.command文件,但其自身明显例外 我的Bash排骨太生疏了,记不起如何获取*.command文件列表、迭代它们、跳过正在运行的文件并执行每个

我的OS X工作站上有一个文件夹,里面有*.command文件


(对于那些不知道的人,*.command文件只是在专用终端窗口中启动和运行的shell脚本)

我已经将这个文件夹拖到我的Dock上,以使用“堆栈”,这样我就可以通过几次单击方便地访问和启动这些脚本

我想向堆栈中添加一个新的“run all.command”脚本,该脚本在同一堆栈中运行所有*.command文件,但其自身明显例外

我的Bash排骨太生疏了,记不起如何获取*.command文件列表、迭代它们、跳过正在运行的文件并执行每个文件(在这种情况下,我将使用“open”命令,以便每个*.command在其专用的终端窗口中打开)


谁能帮帮我吗?

像这样的怎么样:

#! /bin/bash                                                                    

for x in ./*
do
        if [ "$x" != "$0" ]
        then
            open $x
        fi
done

当$0自动保存正在运行的脚本的名称时,

使用@bbg的原始脚本作为起点,并合并@Jefromi和@Dennis Williamson的注释,并解决更多的目录前缀问题,我得到了这个工作版本:

#!/bin/bash
for x in "$(dirname $0)"/*.command
do
  if [ "$(basename $x)" != "$(basename $0)" ]
  then
    open "$x"
  fi
done

“(对于那些不知道的人,*.command文件只是在专用终端窗口中启动和运行的shell脚本)。”我不知道+1.我不太了解OS/X,但“开放”是为了什么?这里有几个问题../*将在所有条目的前面包含.,而
$0
将扩展到脚本的全名,这可能是一个绝对路径。您最好的选择可能是只使用
*
进行通配符,并使用
$(basename$0)
而不是
$0
(首先将其存储在变量中)。您不需要将其存储在变量中,您可以继续指定当前目录。因此,在不使用变量的情况下,如果[“$(basename$x)”!=“cpmd~”],您将拥有
。您可能希望对x in./*.command执行
,使其更加具体,并使用
open“$x”
来保护文件名中的空格。@reinierpost“open”命令本质上告诉OS x“像从dock启动一样运行它”,以便您可以从命令行启动应用程序,在本例中,这些应用程序是通过新的终端窗口启动的shell脚本。