다른 스크립트에서 별칭(ksh) 사용

다른 스크립트에서 별칭(ksh) 사용

스크립트를 작성 중인데 ksh파일 과 스크립트 .profile에서 별칭으로 정의된 명령을 사용하고 싶습니다. 스크립트가 포함된 폴더에서 이 명령을 시도했는데 제대로 작동했습니다. 그러나 내 스크립트에서는 다음과 같습니다 [command] not found.

이 문제를 어떻게 해결할 수 있나요? 내 명령은 ls저장소를 생성한 후 스크립트에서 다음을 수행합니다.

[command]| grep ... | { IFS== read -r var1 x && IFS== read -r var2 x; }

답변1

스크립트에 별칭을 사용하지 마세요. 바로 이런 이유로 나쁜 생각입니다. 이 문제를 해결하는 방법에는 여러 가지가 있습니다.

  • 스크립트 자체에서 별칭을 정의하십시오.
  • 스크립트에서 별칭이 포함된 파일을 가져옵니다. 다음 줄을 추가하세요.

    . /home/your_user/.profile
    
  • 별명 대신 명령 자체를 사용하십시오. 예를 들어, 하나가 있는 경우 alias foo="echo bar"스크립트 echo bar에서 대신 사용하십시오 foo.

일반적으로 에 별칭을 설정하는 것은 좋지 않습니다 .profile. 이 파일은 대화형 셸이나 스크립트 실행 시가 아닌 로그인 셸에서만 읽을 수 있습니다. 별칭에 액세스할 수 있게 하려면 별칭을 에 추가해야 합니다 $HOME/.kshrc.man ksh

exec(2)가 쉘을 호출하고 인수 0의 첫 번째 문자($0)가 -인 경우 쉘은 로그인 쉘로 간주되고 명령은 /etc/profile에서 읽은 다음 .profile 읽기 명령의 모든 파일에서 읽혀집니다. 현재 디렉토리 또는 $HOME/.profile 파일이 존재하는 경우. 다음으로, 대화형 쉘의 경우 파일이 존재하는 경우 매개변수 확장, 명령 대체 및 환경 변수 ENV 값에 대한 산술 대체를 수행하여 지정된 파일에서 명령을 읽습니다.

즉, 로그인 쉘은 변수에 있는 모든 것을 읽는 /etc/profile반면 .profile대화형 쉘(터미널을 열 때 얻는 것)은 $ENV변수에 있는 모든 것을 읽거나 변수가 정의되지 않은 경우 에만 ~/.kshrc의미합니다. .profile별칭은 컴퓨터에 들어가거나 로그인 셸을 시작할 때까지 읽혀지지 않습니다.

관련 정보