其他
为什么执行自己的程序要在前面加./
前言
hello: command not found
$ ./hello
hello world
shell是如何运行程序的
指定路径查找
alias中查找
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
内置命令中查找
echo is a shell builtin
PATH中查找
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
ls: /bin/ls /usr/share/man/man1/ls.1.g
The program 'ls' is currently not installed. You can install it by typing:
apt install coreutils
比如:
$ ./ls_bak
确定解释程序
shell通常可以执行两种程序,一种是二进制程序,一种是脚本程序。
$ ./test.txt
hello world
File "./test.txt", line 2
echo -e "hello world"
^
SyntaxError: invalid syntax
来源:公众号【编程珠玑】
id:shouwangxiansheng
运行
$ . test.txt
test.txt: Bourne-Again shell script, ASCII text executable
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=8ae48f0f84912dec98511581c876aa042824efdb, not stripped
扩展一下
将程序放到PATH路径下
hello world
$ whereis hello
hello: /bin/hello
设置PATH环境变量
$ hello
hello world
设置别名
$ hello
hello world
执行顺序
实际上它的查找顺序可以可以通过type -a来查看:
printf is aliased to `printf "hello\n"'
printf is a shell builtin
printf is /usr/bin/printf
printf is ./printf
hello
以此类推。
总结
安装Python或者Jdk程序为什么要设置PATH环境变量?如果不设置,该如何运行? 除了./方式运行自己的程序还有什么方式? 如果让自己的程序能够像内置命令一样被识别? 如何查看文件类型? 执行一条命令,如何确定是哪里的命令被执行
mv 移动/重命名 file 查看文件信息 whereis 查看命令或者手册位置 type 查看命令类别
如果添加了,它会先从哪里找?能最先找当前路径吗 如果下载了恶意文件,且名字和某些系统命令相同,就可能被你意外执行