我的脚本在更改目录之前工作(它与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命令中的路径?
答案 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