2011-06-08 69 views
0

首先,请允许我声明我完全憎恨Mac。除了Objective-C编程之外,我几乎没有经验。使用shell脚本在Mac上启动Firefox Portable

问题:我需要能够推出闪存驱动器上的便携Firefox安装,目录

[Drive root]/.assets/port/Firefox Portable.app 

我能得到一些帮助下:

  1. 确保shell脚本将接受文件夹名称上的空格和句点
  2. 确保shell脚本将接受文件名中的空格
  3. 允许驱动器根目录为c与Windows机器上领先的“/”类似。

在此先感谢。

回答

2

这应该可以做到。

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

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

说明:在目录模式

  • ls -d尝试列表(所以列出目录名称,而不是它的内容)
  • Firefox\ Portable的backshlash - 意味着逃避下一个字符,(这里的space
  • 2>/dev/null - 不显示错误(或者你可以尝试2>&-太)
  • |head -1 - 仅表明结果第一行(如果这里是多行)
  • ,一切以上分配到变量cmd - 所以,如果这里是一个命令,该变量将包含一个路径
  • && open "$cmd" - 打开存储在变量$ CMD路径上的应用程序时,前面的命令成功(所以这里是一个命令)
+0

谢谢。明天我再次上班时会试试。 – 2011-06-08 22:14:49

+0

不错。假设路径在所有安装的卷上都是唯一的,并且您信任它,并且它是一个格式正确的Mac应用程序,那么应该这样做。 – 2011-06-08 22:33:42

+1

;)是的,你说得对。为了正确性,请检查.../Content/MacOS/Firefox \ Portable是否存在,并使用'lipo'命令查找正确的体系结构,然后打开...;) – jm666 2011-06-08 23:02:35

2

在OS X,open(1)用来从命令行启动一个应用程序:

open "[/Volumes/[Drive file system name]/.assets/port/Firefox Portable.app" 

与任何标准的Unix外壳,包围在引号" "路径将防止空间和时间。

对于给定的闪存驱动器,卷文件系统名称将始终保持不变,除非您更改它。如果您事先不知道文件系统名称是什么,则需要搜索已安装的卷并进行猜测。

为了更加精确,默认情况下,OS X将会尝试使用在/Volumes/[Drive file system name]相同的文件系统挂载USB驱动器安装点除非即装入点已被其他类似名称的文件系统,在其中如果使用修改后的挂载点名称,通常会使用附加内容。或者你或某个程序可以在某个任意的挂载点手动挂载它。所以,在最一般的情况下,您需要搜索。这取决于你想要做什么。

+0

我把它用引号引起来,但它仍然失败(系统找不到/.assets/port/Firefox) – 2011-06-08 22:04:45

+0

所以你说,不像Windows,没有办法告诉它寻找文件,从驱动器根目录开始?因为驱动器将安装在不同的地方,取决于它插入哪台计算机,对吗?就像个人电脑上的事业? – 2011-06-08 22:09:02

+0

如果没有已安装的冲突文件系统(一个具有相同的文件系统卷名称),默认情况下,它应*在每个OS X系统上安装在同一路径上。所以你应该可以在任何地方使用相同的文件路径。就像任何使用自动加载器的Unix系统一样,很难保证在任何可能的情况下,但如果这些是您的系统并且USB驱动器在您的控制之下,它应该可以正常工作。 – 2011-06-08 22:21:37