ToYeah / 42_minishell

A small shell like bash.
10 stars 2 forks source link

[exec] PATHの探索 #24

Closed nafuka11 closed 3 years ago

nafuka11 commented 3 years ago

ls だったらPATHからディレクトリをjoinしていって実行ファイルを探し、あったらそれを実行する。

nafuka11 commented 3 years ago

/bin/ls/echo - Not a directory /bin/hello - No such file or directory ファイルかディレクトリか判定してるので注意が必要そうです。

ToYeah commented 3 years ago

PATH=a/b a/b/ls ls ->実行可能

a/b , ls bash: a/b/ls: No such file or directory hash -rを実行することでnot foundになる

ToYeah commented 3 years ago

lsをmdという名前でコピー

user42@salty-VirtualBox:~/workspace/42_minishell$ export PATH=a
user42@salty-VirtualBox:~/workspace/42_minishell$ md
md: command not found
user42@salty-VirtualBox:~/workspace/42_minishell$ unset PATH
user42@salty-VirtualBox:~/workspace/42_minishell$ echo $PATH

user42@salty-VirtualBox:~/workspace/42_minishell$ md
ast.dot  includes  libft  Makefile  md  minishell  srcs

PATHがない時はカレントディレクトリから検索

ToYeah commented 3 years ago

lsをmdという名前でコピー

user42@salty-VirtualBox:~/workspace/42_minishell/srcs/utils$ export PATH=a/b/
user42@salty-VirtualBox:~/workspace/42_minishell/srcs/utils$ md
a  a.out  ast.dot  build_path.c  env.c  env.o  env_utils.c  env_utils.o  error.c  error.o  md  path_debug_.c  token.c  token.o  token_utils.c
user42@salty-VirtualBox:~/workspace/42_minishell/srcs/utils$ export PATH=/a/b/
user42@salty-VirtualBox:~/workspace/42_minishell/srcs/utils$ md
md: command not found
user42@salty-VirtualBox:~/workspace/42_minishell/srcs/utils$ export PATH=/a/b/

PATHに設定されているpathが絶対パスでない場合はカレントディレクトリから検索

ToYeah commented 3 years ago
user42@salty-VirtualBox:~/workspace/42_minishell/srcs/utils$ ls /
+ ls --color=auto /
bin  ...
user42@salty-VirtualBox:~/workspace/42_minishell/srcs/utils$ ls /../../../../../../../
+ ls --color=auto /../../../../../../../
bin ...

/より上はいけない