쉘에서 .bash_profile / .profile / bashrc에 함수를 추가하는 방법은 무엇입니까?


24

에포크 시간을 날짜로 변환하는 기능이 있습니다. 여기에 정의가 있습니다

date1(){
  date -d @$1
}

나는 쓸 수 있기를 원합니다 :

$ date1 xxxyyy

xxxyyy는 매개 변수이며 함수에 전달하므로 해당 날짜를 얻을 수 있습니다. 나는 중 하나에 추가해야 이해 .bash_profile, .profile또는 .bashrc그것을 소스 다음과 :

$ source file

그러나 어떤 파일을 넣을지 잘 모르겠습니다. 현재에 .profile있습니다. 그러나 그것을 실행하려면 source .profile매번 해야 합니다.

환경 변수처럼 컴퓨터가 시작될 때 사용 가능하게하는 것이 이상적입니다.


입력 샘플의 경우; 1. 텍스트 출력 epochconverter.com은 이제 1514917788입니다. bash 자체에서 stackoverflow.com/questions/1092631/…
AnneTheAgile

답변:


25

보낸 사람 man bash:

bash가 대화식 로그인 쉘 또는 --login 옵션을 사용하는 비 대화식 쉘로 호출되면 파일이 존재하는 경우 먼저 / etc / profile 파일에서 명령을 읽고 실행합니다. 해당 파일을 읽은 후 ~ / .bash_profile, ~ / .bash_login 및 ~ / .profile을 순서대로 찾고 존재하고 읽을 수있는 첫 번째 파일에서 명령을 읽고 실행합니다.

즉,이 중 하나에 넣어 수 있습니다 ~/.bash_profile, ~/.bash_login또는 ~/.profile, 또는 모든 파일은 source그 중 하나에 의해 거라고 . 일반적으로 "로그인 쉘에 대해 실행되는 개인 초기화 파일"인 ~/.profilesource ~/.bashrc를 사용합니다.

이를 활성화하려면 새 쉘을 시작 exec $SHELL하거나 실행하거나 실행하십시오 source ~/.bashrc.


1
글쎄, 나는 인수 인수를 인쇄하는 커스텀 함수를 만드는 방법을 시도했지만 그 함수를 추가하더라도 터미널로 터미널을 열 때마다 바로 가기 .bash_profile를 수행해야 합니다. source ~/.bash_profileCtrl+Alt+T
Vicky Dev

@VickyDev 당신이 항상해야한다면 source ~/.bash_profile그것은 Bash 설정이 표준이 아니거나 손상되었음을 나타냅니다 man bash. 실제로 Bash를 실행하고 있습니까? 예를 들어, echo $BASHPID아무것도 인쇄합니까?
l0b0

추가해야합니까 #!/bin/sh.profile함수를 정의 하려면 맨 위에 합니까?
Kolob Canyon

13

에 함수를 정의한 후을 .profile추가하십시오 export -f date1. 로그인 쉘에서 사용할 함수를 내 보냅니다.


내보내기 +1, ssh ProxyCommand에서 호출하고 별명을 지정해야했으며 소스 .profile 이후에도 찾을 수없는 별명에 대해 계속 울었습니다. 내보내기 후 매력처럼 작동합니다.
Abhishek Anand

7

대화식 쉘에 대한 사용자 정의가 시작됩니다 ~/.bashrc. 로그인 할 때 실행하려는 항목은 ~/.profile(또는 로 로그인 ~/.bash_profile하지만 그래픽으로 로그인 할 때 종종로드되지 않습니다).

이 함수 정의를에 넣으십시오 ~/.bashrc.

bash는로드되지 않기 때문에 .bashrc 이 로그인 쉘이 때, 그렇게하도록 강제하십시오 쓰기 ~/.bash_profile포함

. ~/.profile
case $- in *i*) . ~/.bashrc;; esac

즉, load ~/.profile및 load~/.bashrc 이고 쉘이 대화식 인 경우 됩니다.

.bashrc 와 그에 연결된 게시물의 대안을 참조하십시오 .


1

csh와 tcsh는 bash와 같은 기능을 지원하지 않지만 할 수는 있습니다.

예를 들어 다음은 일부 텍스트를 인쇄하는 간단한 함수입니다.

alias print_hello_world 'eval echo "hello world"'

스크립트에 인수 전달

repeate_after_me 'eval echo "$1"'

if 문과 같은 멀티 라인 코드를 수행하는 것은 다소 복잡하지만 여기에 있습니다.

alias X 'eval "if (\!:1 =~ 'yes') then \\
          echo yes \\
          else \\
          echo no \\
          endif"'

당신은 여전히 ​​평가해야하지만 가장 복잡한 부분은 \!:[x] 명령 줄에서 입력을 얻기 위해 구문을 입니다.

그것은 당신을 정리하기에 충분해야합니다.


0

typeset을 사용 하여 모든 현재 함수를 bashrc로 리디렉션 할 수 있습니다 .

예를 들어, 다음은 선택적 매개 변수가있는 openstack 명령의 함수를 bashrc에 추가하는 방법입니다.

urc() { . stackrc; set -x; openstack server list --all $1; set +x; }
typeset -f >> ~/.bashrc

이제 향후 세션을 위해 저장되며 다음과 같이 사용할 수 있습니다.

$ urc 

또는

$ urc --debug

-1

포인트 18 : 관리자가 ksh와 bash를 배우는 것이 나의 오래된 기억에서 다른 방식으로 키나였습니다. 1 :-/ etc / profile 내용은 sysWide입니다. / etc / skel에는 새 계정에 지정된 파일이 포함되어 있습니다. 배쉬는 이제 모든 배포판의 공통점이되었습니다. 다음은 시스템 표준으로서 2 :-~ / .profile이고 "존재하는 경우".profile의 내용 내에 있습니다. .bash_profile은-> 3 :-.bash_profile 4 :-.bash_login 5 :-. bashrc입니다. 표준 터미널 및 셸 환경과 일반적인 .bash_login을 찾지 못했거나 존재하지 않는 (사용자별로 사용자 정의) 설정하는 것이 올바른 순서입니다. .profile $ PATH를 사용하는 경우.
.bash_profile .profile을 추가해도 여전히 지배적이며 .bash_profile의 존재를 존중하지 않습니다. 헤더 정보와 함께 아무도 업데이트하지 않습니다. bash startup Samples-디렉토리 구조가 더 이상 없습니다-예제와 함께 또는 파일이 gzip입니다. 그래서 Gnu-Bash로 업데이트하십시오


1
무슨 일이야?
Jesse_b
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.