bash 스크립트의 별명 작성 [ -f /etc/bashrc ]; then

그래서 나는 실험을 시도하고 aliasin을 만들었습니다 .bashrc. 그러나 명령을 테스트하면 다음과 같은 결과가 나타납니다.

[rkahil@netmon3 ~]$ menu
-bash: menu: command not found

.bashrc파일에 내가 가진 것은 다음과 같습니다 .

# Source global definitions

if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
alias menu='./menuScript.sh'
alias vi='vim'

재미있는 것은 별명을 만들었을 때 vi효과적이었습니다. 그러나 메뉴는 그렇지 않습니다. UnixStackExchange에서 이전 게시물을 조회하고 다른 게시물을 따르려고 시도했지만 아무 소용이 없습니다. 다른 사람이 제안이 있습니까?



답변

로 시도해야합니다 alias menu='bash ./menuScript.sh'. 나는 현재 Linux 시스템에 있지 않으므로 직접 테스트 할 수는 없지만 작동해야합니다. 별명을 호출하면 경로와 함께 무엇을해야할지 알 수 없으므로 bash시작 부분에를 포함시켜야합니다 .

터미널을 재설정하면 변경 후 도움이됩니다.


답변

당신이 할 때

alias menu='./menuScript.sh'

“해당 파일”이라고하는 별명을 작성하지만 실제로는이 파일로 수행 할 작업을 말하지 않습니다.

그러나 당신이 할 경우

alias menu='source ./menuScript.sh'

또는

alias menu='. ./menuScript.sh'

그 파일을 실행 한다고 말하고 있습니다 .


답변

변경 후 ~ / .bashrc 파일을 소싱하는 것을 기억 했습니까? 컴퓨터를 다시 시작하거나 파일을 소싱 한 후에 .bashrc 파일에 변경 사항이 적용되기 때문입니다.


답변

그것이 작동하는 이유 vim는 직접 경로없이 이미 호출 가능한 프로그램이기 때문입니다. vim이미 “프로그램으로 실행하고 싶다”고 명시 적으로 말할 필요는 없습니다 . 명령을 받으면 vim파일을 이동 /usr/bin/vi하거나 실제 프로그램이있는 곳이면 어디든지 OS에 하드 코딩됩니다 .


답변

별명에는 두 가지 문제가 있습니다

alias menu='./menuScript.sh'
  1. 별명을 호출 할 때 특정 디렉토리에 있어야합니다. menuScript.sh존재하지 않는 디렉토리에 있으면 별칭이 실행되지 않습니다.

    menuScript.sh별칭을 정의 할 때 스크립트에 대한 전체 절대 경로를 지정하면 더 좋습니다 ( 예 :

    alias menu="$HOME/local/bin/menuScript.sh"

    또는 유사합니다.

  2. 다른 사람들이 이미 말했듯이, 별칭이 실패하는 또 다른 이유는 스크립트가 실행 가능하지 않거나 유효하지 않은 행이기 때문입니다 #!. 스크립트가 실행 가능한지 확인하십시오

    chmod +x menuScript.sh

    스크립트의 첫 번째 줄은

    #!/bin/bash

    또는 시스템에서 경로가 bash무엇이든 (또는 스크립트가 작성된 쉘) 무엇이든.