tmux
세션을 초기화한 다음 일부 창을 만드는 작은 파일이 있습니다 . 일부 디버깅 및 조정 후 다음 에서 텍스트 파일 이름을 변경할 때까지 모든 것이 잘 작동했습니다(명령 사용 tmux
) .spam
xset
$ source xset
bash: source: /usr/bin/xset: cannot execute binary file
이제 파일 이름을 다시 바꾸었고 source spam
다시 작동하지만 이유를 알고 싶습니다. 파일은 .dll 파일이 아닌 내 홈 디렉터리에 있습니다 /usr/bin
.
답변1
bash
내부 명령 소스는 파일 이름에 슬래시( )가 없는 한 먼저 PATH에서 파일 이름을 찾습니다 . PATH의 실행 파일이므로 문제가 됩니다./
xset
다음 명령을 실행 source ./xset
하거나 sourcepath 옵션을 off로 변경할 수 있습니다.
shopt -u sourcepath
bash
매뉴얼 페이지 에서 :
source filename [arguments]
Read and execute commands from filename in the current shell
environment and return the exit status of the last command exe‐
cuted from filename. If filename does not contain a slash, file
names in PATH are used to find the directory containing file‐
name. The file searched for in PATH need not be executable.
When bash is not in posix mode, the current directory is
searched if no file is found in PATH. If the sourcepath option
to the shopt builtin command is turned off, the PATH is not
searched. If any arguments are supplied, they become the posi‐
tional parameters when filename is executed. Otherwise the
positional parameters are unchanged. The return status is the
status of the last command exited within the script (0 if no
commands are executed), and false if filename is not found or
cannot be read.
답변2
이것source
명령은:
다음에서 명령을 읽고 실행합니다.파일 이름현재 쉘 컨텍스트의 매개변수입니다. 만약에파일 이름슬래시가 없으면 이
PATH
변수를 사용하여 다음을 찾습니다.파일 이름.
그런 행동.
POSIX에 의해 정의됨(별칭). 왜? 음, 거기에 가져올 수 있는 구성 스크립트를 넣고 PATH
경로를 한정하지 않고도 액세스할 수 있습니다. 필요한 파일에 액세스하려면 절대 또는 상대 경로를 제공하십시오.
source ./xset
source ~/xset
source /home/shawn/xset
위의 모든 작업은 처음에 예상한 대로 작동합니다. sourcepath
비활성화 할 수도 있습니다 .shopt
.