bash : 명령 줄에 주어진 명령을 실행하고 종료하지 마십시오


13

~ / .bashrc를 읽은 후 새 bash 내에서 한 번 실행되는 bash 명령에 명령을 지정하려면 어떻게해야합니까?

시작 후 일부 분할이 일부 응용 프로그램 (vim, mutt, irrsi)을 시작 해야하는 터미네이터 에 대한 "boot-up-configuration"을 사용하고 있습니다. 그러나 여전히 백그라운드에서 일반 쉘을 원합니다 (ctrl-z 등 ...) 응용 프로그램을 종료 한 후 eapplications 수명 동안 가지고있는 것과 동일한 쉘을 가지고 있습니다 ...

나에게 도움이되지 않는 것 (주어진 답변을 기반으로)

 ( bash; vim )              # vim waits for the exit of bash...
 bash -c vim                # bash exits after vims exit...
 bash -c 'vim; exec bash'   # bash is executed _after_ vim... ctrl-z won't work
 echo vim | bash -s         # "Vim: Warning: Input is not from a terminal"     

임시 bashrc에 "vim"을 수동으로 추가해도 작동하지 않습니다. vim이 올바르게 시작되지만 ctrl-z가 나를 가져올 수있는 백그라운드 bash가 여전히 없습니다.

어떤 제안?

답변:


4

작업 제어가 작동하도록 이것을 해결하는 방법을 찾은 것 같습니다.

bash --rcfile <(cat $ {HOME} /. bashrc; echo 'export PROMPT_COMMAND = "vim; 수출 PROMPT_COMMAND ="') -i

이것은 사용자 정의 bashrc 파일을 즉석에서 생성하고 PROMPT_COMMAND 변수를 사용하여 Vim 시작을 지연시켜 작업 제어가 작동하도록합니다. 물론 이것은 Vim에 국한되지 않도록 일반화 할 수 있습니다.

좋아, 방금 터미네이터로 이것을 테스트했으며 적어도 구성 파일로 작동하는 것 같습니다.

[profiles]
[[default]]
    use_custom_command = True
    custom_command = "bash --rcfile <(cat ${HOME}/.bashrc; echo 'export PROMPT_COMMAND="vim; export PROMPT_COMMAND="') -i"

고마워 그래도 unset PROMPT_COMMAND보다는 선호합니다 export PROMPT_COMMAND=.
Peque

2
bash -c 'vim; exec bash'

exec bash새 것으로 현재 배쉬 인스턴스를 대체합니다.


1
그래 흠 ...이 해결할 수있는 문제은 "빈 분할 종료 후"문제 ...하지만 여전히 작동하지 않습니다 CTRL-Z - bash는 단순히 실행 다시 VIMS 종료 후 ... 난 정력 필요가 내부 bash는
marvin2k

1
이 양식을 사용하고 있으며 just 사용할 때 별칭 등을 상속하지 않는다는 것을 알았습니다 exec bash. exec bash --login도움이되지만 언급 한 것처럼 이것은 bash 내부에서 bash를 실행하며 실제로 우리가 원하는 것은 아닙니다.
altendky

실제 솔루션. 못 생겼어 +1
Andrew

2

(Ab) 사용 .bashrc유일하게 유용한 방법입니다. 그러나 1 세대는 불필요합니다. 명령을 환경 변수에 넣으면 eval됩니다.

  • 당신의 끝에 다음을 넣어 ~/.bashrc:

    [[ $startup_cmd ]] && {
        declare +x startup_cmd
        eval "$startup_cmd"
    }
  • 이 명령을 시작하도록 터미네이터를 구성하십시오.

    env startup_cmd='vim' bash

1 "C4를 사용하여 너트를 크래킹"을 제외합시다.


보기 좋게 보이고 첫눈에 작동합니다 ... bashrc를 수정해야합니다. 그것으로 살 수 있습니다 ... 그러나 어떤 이유로 든 ctrl-z는 여전히 작동하지 않습니다. -어떤 종류의 찬장에서 c4 기반 솔루션을 찾을 수 있습니까?
marvin2k

0

ctrl-z 출력 기능이있는 tmux 창에서 vim을 생성하려는 상황에서 이와 동일한 문제가 발생했습니다. 결국, 나는 bash 내부에서 깨끗하게 수행하는 방법을 찾지 못했습니다. 나는 다음에 정착했다.

tmux new-session -d -s foo
tmux send-keys -t foo:0.0 "vim
"

0
bash --rcfile <(cat ${HOME}/.bashrc; echo 'trap vim 12'; echo 'echo $$>/tmp/foo'; echo '( sleep 1;kill -12 `</tmp/foo`; )' ) -i

" 즉석에서 사용자 정의 bashrc 파일 "에 대한 사용자 wor 감사합니다 !

다른 중요한 부분은 bash 내장 " 트랩 "입니다.

  • 위 의 trap 명령은 bash가 신호 12를 수신하면 vim이 실행되도록 정의합니다.
  • rcfile 실행 중에 백그라운드로 들어가면 숨은 kill -12 명령이 1 초 동안 대기하여 bash가 초기화를 완료 할 수 있습니다. 이것을 생략하면, vim 동안 Ctrl-Z는 작업 쉘에 들어 가지 않습니다 .
  • 그런 다음 kill이 실행되어 vim이 시작됩니다.
  • kill은 / tmp / foo에서 프로세스 ID를 읽습니다. 아마도 더 우아한 방법이있을 것입니다.
  • 또한 Ctrl-Z를 테스트했으며 예상대로 작동합니다.

그건 그렇고 당신이 언급 한 "종료 자"가 무엇인지 전혀 모른다.

bash와 screen으로 솔루션을 검색하는 동안 이것을 발견했습니다.

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