2012-03-22 1 views
0

bash 셸을 시작할 때마다 txt 파일을 열어주는 별칭을 .bashrc 파일에 작성했습니다. 문제는 그러한 파일을 한 번만 열고 싶습니다. 처음으로 쉘을 열 때입니다.bashrc에서 별칭을 한 번만 사용하십시오.

그렇게 할 방법이 있습니까?

+1

나는이 질문에 대한 동기를 이해하지 못한다. 첫 번째 로그인시에만 명령을 실행하려면'.login' 또는'.bash_login'에 넣으십시오.이 명령은 실행 쉘인 .bashrc와 달리 로그인 쉘인 경우 sh와 비슷한 쉘에서 실행됩니다. 로그인 bash 쉘과 비 로그인 bash 쉘 모두. –

+0

이 파일을 편집하려고했지만 작동하지 않았습니다. 나는 'gvim path/file.txt'명령을 넣었고 bash 세션을 시작했을 때 아무 일도 일어나지 않았다. – whatsup

+0

아마도 그 문제를 대신 해결하려고 노력해야합니다. 별도의 질문 게시! – tripleee

답변

1

이 문제에 대한 일반적인 해결책은 어떤 종류의 세션 잠금을 설정하는 것입니다. 다른 파일을 편집중인 프로세스의 PID 및/또는 tty로/tmp/secret 파일을 작성하고 완료되면 잠금 파일을 제거 할 수 있습니다. 이제는 이미 존재하는 다른 세션이이 파일을 만들지 않도록 설정해야합니다.

적절한 잠금은 복잡한 주제이지만 간단한 경우에는 충분할 수 있습니다. 그렇지 않은 경우 Google에서 '상호 배제'를 요청합니다. 잘못하면 보안에 영향을 미칠 수 있습니다.

왜이 별칭을 사용하고 있습니까? 코드는 별칭 정의가 아닌 .bashrc에 직접 있어야합니다. 그래서 말하자면, 만약

, 당신이 당신의 .bashrc에 지금 가지고있는 것은

alias start_editing_my_project_work_hour_report='emacs ~/prj.txt &̈́' 
start_editing_my_project_work_hour_report 
unalias start_editing_my_project_work_hour_report 

같은 것이 ... 후 잠금으로, 별명없이, 당신은

# Obtain my UID on this host, and construct directory name and lock file name 
uid=$(id -u) 
dir=/tmp/prj-$uid 
lock=$dir/pid.lock 

# The loop will execute at most twice, 
# but we don't know yet whether once is enough 
while true; do 
    if mkdir -p "$dir"; then 
    # Yay, we have the lock! 
    (echo $$ >"$lock" ; emacs ~/prj.txt; rm -f "$lock") & 
    break 

    else 
    other=$(cat "$lock") 

    # If the process which created the UID is still live, do nothing 
    if kill -0 $other; then 
     break 
    else 
     echo "removing stale lock file dir (dead PID $other) and retrying" >&2 
     rm -rf "$dir" 
     continue 
    fi 
    fi 
done 
같은 것을 끝낼 수있다