我正在尝试运行一个位于我具有管理员权限的目录中的脚本,但我尝试从目录之外的某个地方运行它。即它是一个生成加载脚本,它读取目录中的所有文件并根据这些文件给出输出。但是当我尝试从终端调用它时,它不会运行,除非活动目录是脚本所在的目录,这是一个权限问题吗?
我曾尝试按以下方式运行它:
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
) 扩展为当前目录中的所有文本文件。当然,如果您的当前目录 (不是如果脚本目录下没有任何文本文件,您将不会得到任何输出。
如果您想从脚本内部更改到脚本的目录(这将使*.txt
glob 起作用),请参阅此 Stack Overflow 帖子:Bash 脚本可以告诉您它存储在哪个目录中吗?
在我们这样做的同时——别忘了"$file"
正确引用用来防止文件名带有空格破坏命令。这对你来说无关紧要,因为echo
你并不关心参数,但这是一个值得养成的好习惯。