linux如何在没有完整搜索路径的情况下找到exe

时间:2016-01-11 21:32:05

标签: linux shell command-line executable

当我没有给出整个搜索路径时,linux在后台做什么来查找可执行文件。或者更多人可以描述它找到可执行文件的过程。

3 个答案:

答案 0 :(得分:2)

它使用PATH环境变量。请参阅:http://www.linfo.org/path_env_var.html

答案 1 :(得分:0)

有点像这样:

which(){
    local program="$1" 
  case "$program" in
    /*) #If it's an absolute path, we're done
        echo "$program"; return 0;;
    */*) #If it has a slash but it's not an absolute path, absolutize
        echo "$PWD/$program"; return 0;;
      *) 
        #Otherwise split $PATH on ':'
        (
        IFS=:; for dir in $PATH; do
        #And search for a so-named executable in each component
          ! test -x "$dir/$program" || { echo "$dir/$program"; exit 0; }
        done
        ) 
      ;;
  esac
  return 1
}

答案 2 :(得分:0)

Bash manual,“命令搜索和执行”:

  

将命令拆分为单词后,如果它导致简单命令和可选的参数列表,则执行以下操作。

     
      
  1. 如果命令名称不包含斜杠,则shell会尝试找到它。如果该名称存在shell函数,则按Shell Functions中所述调用该函数。

  2.   
  3. 如果名称与函数不匹配,shell将在shell builtins列表中搜索它。如果找到匹配项,则调用该内置项。

  4.   
  5. 如果名称既不是shell函数也不是内置函数,并且不包含斜杠,Bash会在$PATH的每个元素中搜索包含该名称的可执行文件的目录。 Bash使用哈希表来记住可执行文件的完整路径名,以避免多次PATH次搜索(请参阅Bourne Shell Builtinshash的说明)。仅当在哈希表中找不到该命令时,才会执行$PATH中目录的完整搜索。如果搜索不成功,shell将搜索名为command_not_found_handle的已定义shell函数。如果该函数存在,则使用原始命令和原始命令的参数作为其参数调用它,函数的退出状态将成为shell的退出状态。如果未定义该函数,则shell将输出错误消息并返回退出状态127。

  6.   
  7. 如果搜索成功,或者命令名称包含一个或多个斜杠,则shell在单独的执行环境中执行指定的程序。参数0设置为给定的名称,命令的其余参数设置为提供的参数(如果有)。

  8.   
  9. 如果由于文件不是可执行格式而导致此执行失败,并且该文件不是目录,则假定它是 shell脚本,并且shell按照Shell Scripts

  10.   
  11. 如果命令未异步启动,则shell会等待命令完成并收集其退出状态。

  12.