Bash:“错误的解释器:符号链接级别太多”错误

Nol*_*lph 2 linux bash

最近我制作了一个权限为 722 的 bash 可执行文件,因为我几乎永远是 root。文件内容如下:

#!/home/nolan/Documents/test/listFiles

[ $# -lt 1 ] && dirFocus = "" || dirFocus = $1
dirSize=$(ls -a $dirFocus | wc -w)

for ((a = 1; a <= $dirSize; a++)) ; do
    i = 1
    for ITEM in $(ls -a $dirFocus); do
        declare -i i
        declare -i a
        if [ $a -eq $i ]; then
            echo "$a : $ITEM"
        fi
        i = $[ $i + 1 ]
    done
done
Run Code Online (Sandbox Code Playgroud)

在终端中运行时使用:

root @ /home/nolan/Documents/test: bash listFiles
1 : .
2 : ..
3 : apple
4 : dirCheck
5 : ifTest
6 : ifTest.txt
7 : listFiles
8 : myscript
9 : nolan.txt
10 : pointer_to_apple
11 : scriptx.sh
12 : Stuff
13 : weekend
14 : weekend2
15 : weekend3
Run Code Online (Sandbox Code Playgroud)

我按预期收到了这个结果。但是我做的第二件事:

root @ /home/nolan/Documents/test: ./listFiles
bash: ./listFiles: /home/nolan/Documents/test/listFiles: bad interpreter: Too
many levels of symbolic links
Run Code Online (Sandbox Code Playgroud)

是我得到的错误。究竟出了什么问题?我检查了其他论坛,但它们似乎与我的情况无关。

cho*_*oba 10

脚本的第一行是“shebang”行。它告诉内核(程序加载器)运行什么程序来解释脚本。您的脚本会尝试自行运行以解释脚本,而脚本又会调用自己来解释解释器,依此类推。

当您使用 运行脚本时bash filename,不会调用内核,而是使用 bash 来运行有效的脚本。

#! /bin/bash
Run Code Online (Sandbox Code Playgroud)

到第一行,一切都会好的。

顺便说一句,创建一个权限有限的用户来试验系统。因为root,您可以轻松地摧毁一切无法修复的东西。