bash 함수를 호출하는 방법 유닉스 (bash) 환경으로 전환했습니다. 나는 이것을하고있다

어쩌면 나는 이것을 잘못된 길로보고있을 것이다. 그러나 여기서 나는 내가하고 싶은 일을한다. Java로 대부분의 작업을 수행하지만 유닉스 (bash) 환경으로 전환했습니다. 나는 이것을하고있다 :

[~/Desktop/bashPlay]% cat myFunc
#!/bin/bash

ls2(){
        echo "Hello World"
}

ls3(){
        echo "Testing"
}

echo "this is a test"
ls2 # this calls a function

[~/Desktop/bashPlay]% myFunc
this is a test
Hello World

그러나 파일에 두 가지 기능이 있으며 명령 줄과 별도로 호출 할 수 있기를 원합니다. 즉 : myFunc.ls2()또는 심지어 ls2. 나는 내 .bashrc파일에 함수를 추가 할 수 있지만 내 함수를 추가하지 않고이 함수를 실행할 수있는 다른 방법이 .bashrc있습니까?



답변

이 작업을 수행하는 한 가지 방법은 조금 더 타이핑하는 것과 관련이 있으며 source명령을 사용하는 것입니다. myFunc에서 함수를 호출하려면 사용할 수 있으며 source myFunc; ls2Hello World를 출력합니다.

예를 들어 다음과 같은 파일이 있습니다 say.sh.

#!/bin/bash

function talk()
{
        echo "hi!"
}

이제 talk()명령 줄 에서 함수 를 호출하고 싶습니다 .

[john @ awesome ~] $ 소스 say.sh; 이야기
안녕!

다른 bash 스크립트에서 호출하려면

#!/bin/bash
source say.sh
talk

각각을 별도의 스크립트에 넣고 PATH 변수에있는 디렉토리에 추가 할 수도 있습니다.

예를 들어, 하나의 스크립트에는 hello다음이 있습니다.

#!/bin/bash
echo "Hello World"

이제 이것을 PATH의 디렉토리 중 하나에 넣으십시오 echo $PATH. 기존 디렉토리를 사용하거나 사용하려는 경우 PATH에 다른 디렉토리를 추가 할 수 있습니다. 파일을 복사 한 후로 실행 파일을 만드십시오 chmod +x filename.


답변

또 다른 방법은 functions.sh( ~/bin예를 들어 디렉토리에) 라는 스크립트를 작성하는 것 입니다.

이 스크립트에서는 모든 개인 함수 정의를 추가합니다 (함수를 추가 할 때마다이 파일에 추가합니다 …).

마지막으로 파일에 source ~/bin/functions.sh줄을 추가하면 .bashrc됩니다. 이런 식으로 명령 행에서 전화를 걸 수 .bashrc있고 깨끗하게 유지되며 개인 기능을위한 특정 장소를 갖게됩니다.


답변

당신이 나와 같다면, 당신의 기능으로 환경을 어지럽히고 싶지 않습니다. 또한 기능 측면에서 함께 속한 기능 그룹이 있으므로 동일한 스크립트 파일에 넣는 것이 좋습니다. (여러 파일이있는 폴더는 같은 목적으로 사용될 수 있음을 알고 있습니다). 다음은 스크립트에서 특정 함수를 호출 할 수있는 가능한 솔루션입니다.

$ cat functions.sh
#!/bin/bash

ls2() {
        echo "Hello World"
}

ls3() {
        echo "Testing $*"
}

# the next line calls the function passed as the first parameter to the script.
# the remaining script arguments can be passed to this function.

$1 $2 $3 $4 $5

$ ./functions.sh ls2
Hello World
$ ./functions.sh ls3
Testing
$ ./functions.sh ls3 first_arg
Testing first_arg
$


답변

도트 연산자 또는 source내장 은 Java bashimport명령문 과 유사합니다 .

도트 연산자 또는 source내장 에 대한 자세한 내용을 읽을 수 있습니다 .


답변