스크립트에서 별칭을 업데이트하고 싶습니다.
몇 가지 새로운 별칭이 있습니다 ~/updateFiles/newAliases
.
alias ga='git add -A'
이 업데이트 스크립트도 있습니다 ~/updateFiles/updater
.
#!/bin/bash
cp newAliases ~/.bash_aliases
source ~/.bash_aliases
하지만 작동하지 않는 것 같습니다. 통화 환경을 source
새 별칭 으로 설정하려면 어떻게 해야 합니까 ?
이것은 작동하지 않습니다:
$ cd ~/updateFiles
$ ./updater
$ ga
-su: ga: command not found
이것은 작동합니다:
$ cd ~/updateFiles
$ ./updater
$ source ~/.bash_aliases
$ ga
$
답변1
범위와 구문에서 차이는 매우 미묘합니다.
$ ./updater
동등하다
$ /bin/bash ./updater
스크립트를 실행합니다(실행 가능한 것으로 표시되어 있고 exec
해당 옵션으로 마운트된 파일 시스템에 있는 경우 - 후자의 형식은 이러한 조건 중 하나가 충족되지 않더라도 작동합니다). 이는 새로운 셸 인스턴스를 생성하고 여기에 스크립트 콘텐츠를 제공한다는 의미입니다. 따라서 여기에 정의된 별칭은 셸 기간 동안, 즉 스크립트가 끝날 때까지 해석으로 제한됩니다.
$ . updater
$ . ./updater
$ source updater
$ source ./updater
같은 것을 의미하고 말해요현재의명령줄에 입력한 것처럼 파일 내용을 실행하는 쉘입니다. 이는 별칭, 함수, 환경 변수, 셸 옵션 설정 등을 셸에서 사용할 수 있음을 의미합니다.
이것이 때때로 ~/.bashrc
다음과 같은 쉘 초기화 파일이 표시되는 이유입니다(Bash의 경우).
#!/bin/bash
for n in ~/etc/bash/*; do
. $n
done
다음 ~/etc/bash
과 같이 보일 수 있습니다.
~/etc/bash/
|-- bash.10.env
|-- bash.20.aliases
`-- bash.30.func
(이름은 꽤 자명합니다). 이러한 init 디렉토리에 일부 파일을 추가할 때마다 다음을 수행하여 변경 사항을 적용할 수 있습니다 . ~/.bashrc
. 물론 별칭을 지정할 수도 있습니다. 예를 들어 호스트 이름(또는 bsg-games를 사용하는 달의 위상)을 기반으로 pom
특수 초기화를 수행하는 등 확장할 수도 있습니다.
이러한 설정에 대한 한 가지 큰 주의 사항: 초기화 파일을 "재진입 가능"하게 만들어야 합니다. 해당 파일을 셸에서 몇 번이나 가져왔는지는 중요하지 않습니다. 예를 들어 유지하려는 변수는 조건부로 정의되어야 합니다.
VAR=${VAR:-"value"}
무조건보다는 :
VAR="value"
답변2
이 파일을 구해야 합니다. 그렇지 않으면 별칭의 수명이 매우 짧아집니다. 즉, 호출하는 셸의 기간입니다.
내 거 .bashrc
:
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
별칭을 읽어보세요. 이런 별명도 있습니다:
alias realias='source ~/.bash_aliases'
내 파일의 시작 부분에 .bash_aliases
. 업데이트 후 realias
명령을 실행합니다 .
답변3
스크립트로는 이 작업을 수행할 수 없다고 생각합니다.. 스크립트를 사용하려면 다른 사람들이 설명한 것처럼 실행하지 말고 가져와야 합니다. 또 다른 방법은 함수를 사용하는 것입니다. 다음 줄을 다음 항목에 추가하세요 ~/.bashrc
.
updater(){
cp ~/newAliases ~/.bash_aliases
source ~/.bash_aliases
}
그런 다음 실행 updater
하면 별칭이 업데이트되고 가져옵니다.