最近我制作了一个权限为 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,您可以轻松地摧毁一切无法修复的东西。
| 归档时间: |
|
| 查看次数: |
2848 次 |
| 最近记录: |