3
#!/bin/bash

mkdir /tmp
curl -O http://www.mucommander.com/download/nightly/mucommander-current.app.tar.gz /tmp/mucommander.tgz
tar -xvzf /tmp/mucommander.tgz */mucommander.app/*
cp -r /tmp/mucommander.app /Applications
rm -r /tmp

我正在尝试创建一个 shell 脚本来下载 muCommander 并将其提取到我在 Mac 上的应用程序目录中。

我尝试 cd 进入 tmp 目录,但是当我这样做时脚本停止了。我可以使用 -C 参数提取所有内容,但是当前的 tgz 路径是 muCommander-0_9_0/mucommander.app,它可能会在以后的构建中发生变化,所以我试图保持它的通用性。

谁能给我指点我哪里出错了?

提前致谢。

4

2 回答 2

1

以下将更新您的 muCommander。

#for the safety, remove old temporary extraction from the /tmp
rm -rf /tmp/muCommander.app

#kill the running mucommander - you dont want replace the runnung app
ps -ef | grep ' /Applications/muCommander.app/' | grep -v grep | awk '{print $2}' | xargs kill

#download, extract, remove old, move new, open
#each command run only when the previous ended with success
curl http://www.mucommander.com/download/nightly/mucommander-current.app.tar.gz  |\
 tar -xzf - -C /tmp --strip-components=1 '*/muCommander.app' && \
 rm -rf /Applications/muCommander.app && \
 mv /tmp/muCommander.app /Applications && \
 open /Applications/muCommander.app

请注意,在“\”之后必须跟随新行,而不是任何空格......

于 2012-09-23T17:09:44.803 回答
1

从 tar(1) 解压缩存档时,剥离第一个路径组件:

 --strip-components count
         (x mode only) Remove the specified number of leading path ele-
         ments.  Pathnames with fewer elements will be silently skipped.
         Note that the pathname is edited after checking inclusion/exclu-
         sion patterns but before security checks.

更新

这是一个工作bash示例,说明如何相当一般地将tgz文件的内容复制到/Applications.

shopt -s nocaseglob

TMPDIR=/tmp
APP=mucommander
TMPAPPDIR=$TMPDIR/$APP

mkdir -p $TMPAPPDIR

curl -o $TMPDIR/$APP.tgz http://www.mucommander.com/download/nightly/mucommander-current.app.tar.gz
tar --strip-components=1 -xvzf $APP.tgz -C $TMPAPPDIR
mv $TMPAPPDIR/${APP}* /Applications
# rm -rf $TMPAPPDIR $TMPDIR/$APP

rm命令暂时被注释掉,在使用之前验证它是否无害。

于 2012-07-30T15:02:10.423 回答