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

时间:2011-06-08 20:36:47

标签: macos shell usb-drive

首先,请允许我声明我完全厌恶Mac。我对它们的经验很少,除了在Objective-C中编程。

问题:我需要能够在闪存驱动器上的目录

下启动便携式firefox安装
[Drive root]/.assets/port/Firefox Portable.app

我可以获得一些帮助:

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

2 个答案:

答案 0 :(得分:2)

在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驱动器,除非该安装点已被另一个使用类似命名的文件系统,在这种情况下,将使用修改的挂载点名称,通常通过附加内容。或者您或某些程序可以在某个任意挂载点手动挂载它。因此,在最一般的情况下,您需要搜索。这取决于你想要做什么。

答案 1 :(得分:2)

这应该可以解决问题。

cmd=$(ls -d /Volumes/*/.assets/port/Firefox\ Portable.app 2>/dev/null | head -1) && open "$cmd"

将在/ Volumes中的所有已安装驱动器上尝试ls所有Firefox,并将启动第一个。 (什么都不做,什么时候找不到任何Firefox。)

说明:

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