在目录外运行 bash 脚本

在目录外运行 bash 脚本

我正在尝试运行一个位于我具有管理员权限的目录中的脚本,但我尝试从目录之外的某个地方运行它。即它是一个生成加载脚本,它读取目录中的所有文件并根据这些文件给出输出。但是当我尝试从终端调用它时,它不会运行,除非活动目录是脚本所在的目录,这是一个权限问题吗?

我曾尝试按以下方式运行它:

sh /path/to/file/FILE
./path/to/file/FILE

但是当我cd到目录并运行时

./FILE

它运行良好。

我的帐户的权限:

drwxrwxr-x 5 edennis edennis       4096 Nov 14 14:35 . 

脚本的权限:

-rwxrwxr-x 1 edennis edennis       3644 Nov 14 11:45 zScript

脚本正在访问的文件权限:

-rw-rw-r-- 1 edennis edennis   10437424 Oct 15 10:27 document.txt

脚本内容:

#!/bin/bash

for file in *.txt

do

echo "this is my favorite file " "$file" >> output.txt;

done

答案1

问题是,当你运行脚本时,你仍然停留在当前目录中。因此,下面这一行

for file in *.txt

会将 glob ( *.txt) 扩展为当前目录中的所有文本文件。当然,如果您的当前目录 (不是如果脚本目录下没有任何文本文件,您将不会得到任何输出。

如果您想从脚本内部更改到脚本的目录(这将使*.txtglob 起作用),请参阅此 Stack Overflow 帖子:Bash 脚本可以告诉您它存储在哪个目录中吗?


在我们这样做的同时——别忘了"$file"正确引用用来防止文件名带有空格破坏命令。这对你来说无关紧要,因为echo你并不关心参数,但这是一个值得养成的好习惯。

相关内容