bash脚本使用word指示符和单词修饰符自动化wget tar cd

时间:2012-05-23 08:55:31

标签: bash shell wget tar

如何使用单词指示符和单词修饰符或类似内容使用bash shell脚本自动执行以下操作?

root@server:/tmp# wget -q http://download.zeromq.org/zeromq-2.2.0.tar.gz
root@server:/tmp# tar -xzf !$:t
tar -xzf zeromq-2.2.0.tar.gz
root@server:/tmp# cd !$:r:r
cd zeromq-2.2.0
root@server:/tmp/zeromq-2.2.0#

当我尝试类似下面的内容时,我会收到错误,因为单词指示符和单词修饰符在bash脚本中的效果与在shell中的表现方式不同:

Bash Shell脚本示例1:

#!/usr/bin/env bash
wget -q http://download.zeromq.org/zeromq-2.2.0.tar.gz && tar -xzf !$:t && cd !$:r:r

root@server:/tmp# ./install.sh 
tar (child): Cannot connect to !$: resolve failed

gzip: stdin: unexpected end of file
tar: Child returned status 128
tar: Error is not recoverable: exiting now

Bash Shell脚本示例2:

#!/usr/bin/env bash
wget -q http://download.zeromq.org/zeromq-2.2.0.tar.gz
tar -xzf !$:t
cd !$:r:r

root@server:/tmp# ./install.sh 
tar (child): Cannot connect to !$: resolve failed

gzip: stdin: unexpected end of file
tar: Child returned status 128
tar: Error is not recoverable: exiting now
./install.sh: line 11: cd: !$:r:r: No such file or directory

2 个答案:

答案 0 :(得分:4)

历史记录替换在命令行中有效。在脚本中,您可以使用参数扩展。

#!/usr/bin/env bash
url=http://download.zeromq.org/zeromq-2.2.0.tar.gz
wget -q "$url"
tarfile=${url##*/}        # strip off the part before the last slash
tar -xzf "$tarfile"
dir=${tarfile%.tar.gz}    # strip off ".tar.gz"
cd "$dir"

答案 1 :(得分:1)

如果提供的示例是您尝试解决的唯一问题,则以下内容可能有所帮助:

version="2.2.0"
wget -q http://download.zeromq.org/zeromq-${version}.tar.gz
tar -xzf zeromq-${version}.tar.gz
cd zeromq-${version}

在bash脚本中,版本可能是传递给脚本的第一个选项:

version=$1

这不包含错误处理等等,但应该让你开始。