Macos 使用shell脚本在Mac上启动Firefox Portable

Macos 使用shell脚本在Mac上启动Firefox Portable,macos,shell,usb-drive,Macos,Shell,Usb Drive,首先,请允许我声明,我讨厌Mac电脑的全部内容。除了用Objective-C编程外,我对它们几乎没有什么经验 问题:我需要能够在闪存驱动器上的目录下启动便携式firefox安装 [Drive root]/.assets/port/Firefox Portable.app 我能在以下方面得到帮助吗 确保shell脚本将接受文件夹名称上的空格和句点 确保shell脚本将接受文件名中的空格 允许更改驱动器根目录,类似于windows计算机上的前导“/” 提前感谢。在OS X上,open(1)用于从命

首先,请允许我声明,我讨厌Mac电脑的全部内容。除了用Objective-C编程外,我对它们几乎没有什么经验

问题:我需要能够在闪存驱动器上的目录下启动便携式firefox安装

[Drive root]/.assets/port/Firefox Portable.app
我能在以下方面得到帮助吗

  • 确保shell脚本将接受文件夹名称上的空格和句点
  • 确保shell脚本将接受文件名中的空格
  • 允许更改驱动器根目录,类似于windows计算机上的前导“/”
  • 提前感谢。

    在OS X上,
    open(1)
    用于从命令行启动应用程序:

    open "[/Volumes/[Drive file system name]/.assets/port/Firefox Portable.app"
    
    与任何标准的Unix shell一样,将路径括在引号中可以防止空格和句点

    对于给定的闪存驱动器,卷文件系统名称将始终相同,除非您更改它。如果您事先不知道文件系统名称,则需要搜索装入的卷并猜测

    更准确地说,默认情况下,OS X将尝试在
    /Volumes/[drive file system name]
    装载点使用相同的文件系统装载USB驱动器,除非该装载点已被另一个类似的命名文件系统使用,在这种情况下,将使用修改后的装载点名称,通常是通过附加某些内容。或者您或某些程序可以在任意装入点手动装入它。因此,在最一般的情况下,您需要搜索。这取决于您尝试执行的操作。

    在OS X上,
    open(1)
    用于从命令行启动应用程序:

    open "[/Volumes/[Drive file system name]/.assets/port/Firefox Portable.app"
    
    与任何标准的Unix shell一样,将路径括在引号中可以防止空格和句点

    对于给定的闪存驱动器,卷文件系统名称将始终相同,除非您更改它。如果您事先不知道文件系统名称,则需要搜索装入的卷并猜测


    更准确地说,默认情况下,OS X将尝试在
    /Volumes/[drive file system name]
    装载点使用相同的文件系统装载USB驱动器,除非该装载点已被另一个类似的命名文件系统使用,在这种情况下,将使用修改后的装载点名称,通常是通过附加某些内容。或者您或某些程序可以在任意装入点手动装入它。因此,在最一般的情况下,您需要搜索。这取决于你想做什么。

    这应该能奏效

    cmd=$(ls -d /Volumes/*/.assets/port/Firefox\ Portable.app 2>/dev/null | head -1) && open "$cmd"
    
    将在/卷中所有已安装的驱动器上尝试
    ls
    all Firefox,并将启动第一个。(如果找不到Firefox,则什么也不做。)

    说明:

    • ls-d
      在目录模式下尝试列表(因此列出目录名而不是目录内容)
    • Firefox\Portable
      中的backshlash表示转义下一个字符(这里是
      空格
    • 2>/dev/null
      -不要显示错误(或者您也可以尝试
      2>&-
    • | head-1
      -仅显示结果的第一行(如果这里有更多行)
    • 上面的所有内容都分配到变量
      cmd
      ——因此,如果这里有一个命令,该变量将包含一个路径名
    • &&open“$cmd”
      -当上一个命令成功时,在变量$cmd中存储的路径上打开应用程序(这里是一个命令)

    这应该可以做到

    cmd=$(ls -d /Volumes/*/.assets/port/Firefox\ Portable.app 2>/dev/null | head -1) && open "$cmd"
    
    将在/卷中所有已安装的驱动器上尝试
    ls
    all Firefox,并将启动第一个。(如果找不到Firefox,则什么也不做。)

    说明:

    • ls-d
      在目录模式下尝试列表(因此列出目录名而不是目录内容)
    • Firefox\Portable
      中的backshlash表示转义下一个字符(这里是
      空格
    • 2>/dev/null
      -不要显示错误(或者您也可以尝试
      2>&-
    • | head-1
      -仅显示结果的第一行(如果这里有更多行)
    • 上面的所有内容都分配到变量
      cmd
      ——因此,如果这里有一个命令,该变量将包含一个路径名
    • &&open“$cmd”
      -当上一个命令成功时,在变量$cmd中存储的路径上打开应用程序(这里是一个命令)

    我用引号将其括起来,但它仍然失败(系统无法找到/.assets/port/Firefox),因此您的意思是,与windows不同,无法告诉它从驱动器根目录开始查找文件?因为驱动器将安装在不同的位置,这取决于它插入的计算机,对吗?与PC上的driveletters一样?如果没有已装入的冲突文件系统(具有相同文件系统卷名的文件系统),默认情况下,它应装入每个OS X系统上的相同路径。因此,您应该能够在任何地方使用相同的文件路径。像任何使用自动挂载器的Unix系统一样,很难保证在任何可能的情况下都能正常工作,但如果这些是您的系统,并且USB驱动器在您的控制下,它应该可以正常工作。我不确定您为什么会对引用的文件名产生问题。您是直接在OSX终端窗口外壳中运行它,还是以某种方式远程运行它?另一种处理方法是使用
    \
    来保护空间,因此
    打开[…]Firefox\Portable.app
    我将其括在引号中,但它仍然失败(系统无法找到/.assets/port/Firefox),所以您是说,与windows不同,无法告诉它从驱动器根目录开始查找文件?因为驱动器将安装在不同的位置,这取决于它插入的计算机,对吗?与PC上的driveletters一样?如果没有已装入的冲突文件系统(具有相同文件系统卷名的文件系统),默认情况下,它应装入每个OS X系统上的相同路径。因此,您应该能够在任何地方使用相同的文件路径。喜欢