mpiexec
전체 경로가 인 실행 파일 이 ~/petsc-3.2-p6/petsc-arch/bin/mpiexec
있습니다. 전체 경로를 다시 입력하지 않고 다른 디렉토리에서이 명령을 실행하려고하므로 홈 .bashrc
파일에 별명을 설정했습니다 .
alias petsc="~/petsc-3.2-p6/petsc-arch/bin/mpiexec"
다음을 mpiexec
입력하여 명령 프롬프트 에서이 파일을 쉽게 실행할 수 있습니다.
petsc myexecutable
script
새 별명 petsc
을 명령으로 사용하여 라는 이름의 쉘 스크립트 파일을 쓰려고했습니다 . 쉘 스크립트에 적절한 권한을 부여한 후 (을 사용하여 chmod
) 스크립트를 실행하려고했습니다. 그러나 다음과 같은 오류가 발생했습니다.
./script: line 1: petsc: command not found
나는 단지의 전체 경로 쓸 수 있음을 알고 mpiexec
파일을하지만, 나는 새로운 스크립트를 작성하고자하는 전체 경로 매번 작성하는 번거 롭다. petsc
스크립트 파일 내에서 별칭을 사용할 수있는 방법이 있습니까? 편집 .bashrc
하거나 .bash_profile
이를 수행 할 수있는 방법 이 있습니까?
답변
-
쉘 스크립트에서 별명 대신 전체 경로를 사용하십시오.
-
쉘 스크립트에서 변수, 다른 구문을 설정하십시오
petsc='/home/your_user/petsc-3.2-p6/petsc-arch/bin/mpiexec' $petsc myexecutable
-
스크립트에서 함수를 사용하십시오.
petsc
복잡한 경우 아마도 더 나은function petsc () { command 1 command 2 } petsc myexecutable
-
별명 소싱
shopt -s expand_aliases source /home/your_user/.bashrc
당신은 아마 당신의 소스를 원하지 않기 .bashrc
때문에 IMO는 처음 3 개 중 하나가 더 좋을 것입니다.
답변
쉘 기능을 위해 별명은 더 이상 사용되지 않습니다. 로부터 bash
매뉴얼 페이지 :
For almost every purpose, aliases are superseded by shell functions.
함수를 작성하고 서브 쉘로 내보내려면 다음을 다음에 넣으십시오 ~/.bashrc
.
petsc() {
~/petsc-3.2-p6/petsc-arch/bin/mpiexec "$@"
}
export -f petsc
그런 다음 스크립트에서 자유롭게 명령을 호출 할 수 있습니다.
답변
쉘 함수 및 별명은 쉘로 제한되며 실행 된 쉘 스크립트에서 작동하지 않습니다. 귀하의 경우에 대한 대안 :
-
(
mpiexec
대신에 사용하지 않아도되는 경우petsc
) 변수에 추가$HOME/petsc-3.2-p6/petsc-arch/bin
하십시오PATH
. 편집~/.profile
및 추가하여 수행 할 수 있습니다 .PATH="$HOME/petsc-3.2-p6/petsc-arch/bin:$PATH"
변경 사항을 적용하려면 다시 로그인하십시오
-
디렉토리를
~/bin
만들고-
다음을 포함하는 랩퍼 스크립트
petsc
를 작성하십시오.#!/bin/sh exec ~/petsc-3.2-p6/petsc-arch/bin/mpiexec "$@"
-
프로그램이 허용하는 경우 쉘 스크립트를 건너 뛰고 다음 명령을 사용하여 심볼릭 링크를 만들 수 있습니다.
ln -s ~/petsc-3.2-p6/petsc-arch/bin/mpiexec ~/bin/petsc
-
답변
bash 4에서는 특수 변수를 사용할 수 있습니다 : $BASH_ALIASES
.
예를 들면 다음과 같습니다.
$ alias foo="echo test"
$ echo ${BASH_ALIASES[foo]}
echo test
$ echo `${BASH_ALIASES[foo]}` bar
test bar
또는 변수로 정의한 다음 명령 대체 또는를 사용하십시오 eval
.
예를 들어 다음과 같은 별칭을 정의하는 대신
alias foo="echo test"
그것을 다음과 같이 정의하십시오 :
foo="echo test"
대신에. 그런 다음 다음 중 하나를 수행하십시오.
find . -type f -exec sh -c "eval $foo" \;
또는:
find . -type f -exec sh -c "echo `$foo`" \;
답변
bash가 -i 플래그를 사용하여 스크립트를 대화식 쉘로 실행하도록 할 수 있습니다. 이것은 .bashrc 파일 에 별명 및 기타 기능을 정의하도록 지시합니다.
예:
~ $ grep ll .bashrc
alias ll='ls -lah'
~ $ cat script.sh
#!/bin/sh
ll
~ $ bash script.sh
script.sh: line 3: ll: command not found
~ $ bash -i script.sh
..directory contents..
더 많은 정보:
$ man bash
답변
ALIASES
...
Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS
below).
따라서이 질문에 대한 진정한 대답은 쉘 스크립트에서 실제 별칭을 대신 사용하려는 경우 다음과 같습니다.
#!/bin/bash
shopt -s expand_aliases
alias foo=bar
foo whatever
에 관해서는 왜 나는이 작업을 수행 할 것 : 때문에 특별한 상황에, 나는 그것이 쉘 스크립트의 생각에 Dockerfile 트릭을해야합니다.
답변
-
에서
.bash_aliases
:petsc { ~/petsc-3.2-p6/petsc-arch/bin/mpiexec "$@" }
또는에 기능을 넣으십시오
.bashrc
. 일반적으로의.bashrc
구성 설정에만bash
저장됩니다. -
터미널에서 :
source .bash_aliases
- 불러라:
petsc arg(s)
장점 : 당신이 필요하지 않습니다 export -f petsc
에서 .bash_aliases
. 별명은 더 이상 사용되지 않지만 .bash_aliases
함수에 사용 하는 것은 좋습니다.