根据文件 shell 脚本更改目录

根据文件 shell 脚本更改目录

首先是背景,我正在尝试编写一个可执行的 shell 脚本,我可以轻松地将其映射为自动解压的 .tgz 文件的默认值。

到目前为止很简单

tar -xzvf $1

它可以拖/放,但如果我双击则不行。因为如果文件位于同一位置我可以使用它,所以我认为这是因为脚本的当前工作目录。

然而,同样 $1 不应该将完整文件路径传递给 tar 命令,这样就没关系了?

无论如何,我当时认为答案是 pwd 命令,然后是 dirname 命令,即

cd 'dirname $1'

但这不起作用谷歌建议

cd -P -- "$(dirname -- "$1")" && pwd -P

但我仍然无法让这个脚本工作。这可能不是正确的错误。

答案1

不,$1不会扩展到完整文件路径,它实际上是确切的第一个参数 - 即使文件不存在。

一个简单的例子echo $1确实揭示了这一点。

只需使用该-C标志即可,而不是进行笨拙的目录更改。

man tar

-C, --directory=目录

在执行任何操作之前更改为 DIR。该选项是顺序敏感的,即它影响后面的所有选项。

即你的脚本将是:

#!/bin/bash
tar -C "$(dirname "$(readlink -f "$1")")" -xzvf "$1"

相关内容