없이 현재 쉘에서 스크립트를 실행하십시오. 명령하기 전에


26

현재 쉘에서 스크립트를 실행해야하는 경우 명령 앞에 점을 추가하면됩니다.

   . ./somescript.sh

매번 점을 입력하지 않고이 작업을 수행 할 수 있습니까? 예를 들어 스크립트 자체에서 상위 셸로 변경하는 명령?

답변:


22

정확히 원하는 것은 아니지만 할 수있는 일 :

alias somescript.sh='. ./somescript.sh'

2
이것은 내 문제를 완벽하게 해결했습니다. 고맙습니다!
alu

8

매번 점을 입력하지 않고이 작업을 수행 할 수 있습니까? 예를 들어 스크립트 자체에서 상위 셸로 변경하는 명령?

나는 타이핑하는 것을 제외하고는 생각하지 않지만 source somescript.sh아마도 당신이 찾고있는 것이 아닐 것입니다 ^^.

으로 평소와 같이 스크립트를 실행하면 ./somescript.sh셸에서이 명령 을 실행하고 실행합니다 . 명령을 커널로 전달한 다음, 커널 #!은 스크립트 내부의 행 을 구문 분석하여이 명령의 실행 방법을 결정합니다 . 그런 다음 커널은 지정된 인터프리터 (이 경우 아마도 bash서브 쉘)를 시작합니다. 따라서 수정 사항 somescript.sh은 부모 셸에 영향을주지 않고 서브 쉘에서 환경을 격리시킵니다.

쉘이 다른 프로세스를 시작하지 않고 스크립트 자체를 읽으려면 .or source키워드 를 사용하여 명시 적으로 알려야합니다 .


자세한 설명을 주셔서 감사합니다. :) 이제는 호출 된 스크립트 에서이 작업을 수행 할 수있는 방법이 없다는 것을 알지만 alias, scott이 제안한 것처럼 부모 쉘이 명령으로 하위 쉘을 만들지 말라고 말할 수 있습니다 .
alu

1

./somescript.sh외부 프로그램으로 실행하면 내 보내지 않은 변수 액세스, 변수 설정, 현재 디렉토리 변경 등과 같은 실행중인 셸 프로세스 내부에서 아무것도 수행 할 수 없습니다.이 문제를 해결할 방법이 없습니다.

(자, 하위 프로세스에서 디버거를 실행하고 부모 프로세스의 메모리를 조정할 수 있습니다. 그러나 시도하면 부모 셸이 충돌 할 가능성이 큽니다.)

당신은 실행해야합니다 . ./somescript.sh. 원하는 경우 별칭 또는 함수 뒤에 숨길 수 있지만, 부모 쉘에서 별칭 또는 함수 정의를 다시 수행해야합니다.


0

실행하려는 스크립트가 실행 가능하지 않다고 생각합니다. chmod a+x somescript.sh사용자, 그룹 및 기타 (ugo)에 대한 실행 비트를 해당 파일에 추가합니다. 파일의 첫 줄에는 #! 상단에 줄이 #!/bin/bash있습니다.

ls -l somescript.sh파일에 대한 rwx 트리플렛 (읽기 / 쓰기 / 실행)이 표시됩니다. 파일을 소유하고 있다고 가정하면 적어도 첫 번째 세트에는 x가 필요합니다.


스크립트 자체는 잘 작동하지만 셸의 환경 변수를 수정할 수 있도록 현재 셸에서 실행하고 싶습니다.
alu

export PATH=$PATH:/usr/local/bin$ PATH에 / usr / local / bin을 추가 하는 등 스크립트에서 원하는 변수 내보내기가 작동하지 않으면 실행중인 환경 변수를 변경하기 위해 파일을 소스해야합니다. 이 질문은 실제로 "bash 스크립트에서 실행중인 쉘의 환경 변수를 프로그래밍 방식으로 어떻게 변경합니까?"입니다. 스크립트 . ./somescript.sh가 제대로 실행되고 있습니다. dot 명령을 사용하여 파일을 소싱하고 있습니다. tcsh는 같은 것을 위해 "소스"를 사용합니다.
AR Diederich

변수 수정은 단지 예일뿐입니다. 내 질문은 쉘에 실제로 쓰지 않고 점이 있어야한다고 말할 수 있는지 여부입니다 (예 : 스크립트 자체에서)
alu

스크립트의 동작을 완전히 바꿀 수있는 점을 쉽게 잊을 수 있습니다.
alu

0
export PATH=$PATH:.

쉘에서 해당 명령을 실행하거나 쉘 구성 파일에 추가하면 현재 디렉토리가 PATH 변수에 추가됩니다. PATH 변수는 명령을 실행할 때 쉘이 실행할 바이너리를 찾을 디렉토리 목록입니다.

이를 통해 현재 디렉토리에서 모든 실행 파일을 실행할 수 있습니다. ./


1
OP는 파일 이름의 일부가 .아닌 것을 묻습니다 ./. ./somescript를 실행해도 현재 셸에서 실행되지 않습니다 . ./somescript.
Anthon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.