如果更改脚本目录,如何更改cat的路径?

时间:2015-11-03 20:49:51

标签: bash unix cat

我的脚本在更改目录之前工作(它与Main Dir在同一目录中:

#!/bin/bash

name=$1
amount=$2
cat "Main Dir/$name/sent.txt"|sort -k2|cut -d"  " -d"   "-f1|tail   -n-$amount

现在我已经创建了“Main Dir”另一个目录“scripts”并将我的脚本放在那里。

#!/bin/bash

name=$1
amount=$2
cat "../Main Dir/$name/sent.txt"|sort -k2|cut -d"   " -d"   " -f1|tail -n-$amount

现在尝试通过“sh path / name.txt param1 param2”从命令描边运行它,但是它说“没有这样的文件或目录”?

我应该如何更改cat命令中的路径?

2 个答案:

答案 0 :(得分:0)

嗯...它依赖于我从哪个地方运行脚本。如果我在包含主目录和脚本的目录中,我按照我在问题中写的那样运行它,但没有" .."它可以工作。如果我cd脚本并尝试仅通过sh运行它,那么它就找不到Main Dir。有人可以解释一下吗?

答案 1 :(得分:0)

问题是..是相对于脚本的工作目录,通常是包含脚本的目录。工作目录继承自运行脚本的任何进程 - 例如你的命令shell。

通常可以安全地依赖$0作为脚本的路径,因为shell会以这种方式设置它,而其他程序通常也会这样做。但是,$0可能是相对路径。也就是说,如果您进入scripts目录并运行./myscript,则$0将为./myscript。但是,如果您将/home/ilya/project/scripts放在路径中并运行myscript,那么$0将是完整路径/home/ilya/project/scripts/myscript

我们可以通过说/myscript来删除$0(或任何脚本名称)的${0%/*}末尾。

因此:

#!/bin/bash

name=$1
amount=$2
file="${0%/*}/../Main Dir/$name/sent.txt"
cat "$file" |sort -k2|cut -d"   " -d"   " -f1|tail -n-$amount