~./bashrc 실행 후 ssh를 통해 원격 컴퓨터의 디렉터리를 변경합니다.

~./bashrc 실행 후 ssh를 통해 원격 컴퓨터의 디렉터리를 변경합니다.

SSH를 통해 원격 컴퓨터에서 스크립트를 실행하려고 합니다. 이를 위해 디렉토리를 변경하고 거기에서 스크립트를 실행하고 싶습니다. 내가 찾은 표준 방법은 다음과 같습니다.

ssh -Y -t user@server 'cd dir; exec bash'

그러나 문제는 스크립트를 실행하기 전에 ~./bashrc에서 수행하는 몇 가지 추가 스크립트를 설정해야 한다는 것입니다. 내 문제는 ~./bashrc가 실행되기 전에 디렉토리 변경이 발생하는 방식으로 명령이 작성된다는 것입니다. 즉, 이전에 설정해야 했던 코드가 엉망이 됩니다. 참고: 명령을 다음으로 변경합니다.

ssh -Y -t user@server 'exec bash; cd dir'

bash는 정상적으로 실행되지만 이후 디렉터리는 변경되지 않습니다. 미리 감사드립니다.

답변1

내 문제는 ~./bashrc가 실행되기 전에 디렉토리 변경이 발생하는 방식으로 명령이 작성된다는 것입니다.

아마도 ~/.bashrc아무도 그것을 전혀 읽지 않을 것입니다. Bash는 ~/.bashrc호출될 때만 읽습니다.인터렉티브(비로그인) 쉘. 명령줄에서 실행할 명령을 실행하면 ssh이 옵션을 사용하여 셸이 실행되어 -c비대화형이 됩니다.

하지만 수동으로 소싱하여 이 문제를 해결할 수 있습니다 .bashrc.

ssh -t user@server '. ~/.bashrc; cd dir; exec bash'

일부 bashrc파일은 셸이 대화형인지 확인하고 그렇다면 변경 사항만 적용합니다. ( bashrc대화형 쉘에서만 읽을 수 있기 때문에 불필요한 것처럼 들리지만 Bash의 시작 파일이 작동하는 방식으로 인해 bashrc일반적으로 .bash_profile또는 동등한 파일에서 파생되기도 합니다.)

이 문제를 해결하려면 다음과 같이 Bash에 대한 대화형 호출을 강제해야 합니다.

ssh -t user@server 'bash -ic "cd /tmp; exec bash"'

.bashrc-i이제 Bash가 스스로 할 수 있기 때문에 수동으로 소싱할 필요가 없습니다 . 이것두번째Bash(from exec bash)도 이 작업을 수행할 수 있으므로 문제가 되는 경우 마지막 부분을 exec bash --norc.

...

관련 설정을 여러 파일(예: )로 분할하는 것이 좋습니다 .thingy.rc. 그런 다음 .bashrc(필요한 경우) 명령을 대신 SSH로 실행합니다 .bashrc.

답변2

하나는 어때?여기아래와 같이 문서화:

ssh user@server << EOF exec bash       
cd dir
EOF

관련 정보