bash에서 Fish로 마이그레이션하려고 하는데 많은 호환성 문제와 손상된 명령에 직면하고 있습니다.
원활한 셸 마이그레이션을 달성하기 위해 따라야 하는 단계의 프레임워크는 무엇입니까? 또한, bash가 아닌 쉘을 사용하여 새 프로그램을 다운로드할 때 주의해야 할 사항은 무엇입니까?
답변1
Fish 쉘은 POSIX 쉘/Bourne 쉘과 호환되지 않으며 여러 면에서 다릅니다. 쉘 스크립트는 주로 sh 또는 bash를 사용하므로 스크립트 시작 부분에서 올바른 해석기를 선택하도록 주의해야 합니다. unix.stackexchange.com의 많은 셸 기반 솔루션에서도 마찬가지입니다.
추천도서 https://fishshell.com/docs/current/fish_for_bash_users.html차이점을 위해.
답변2
Fish는 bash 또는 POSIX 쉘과 호환되지 않습니다.
즉, 사용하는 스크립팅 언어가 다르기 때문에 bash 또는 sh 스크립트를 직접 실행할 수 없습니다.
즉, 누군가 "셸에서 이 명령을 실행하세요"라고 말하면 Fish 호환 버전을 구하거나 직접 번역하거나 bash 세션을 열고 그곳에서 실행해야 한다는 의미입니다.
이 중 어느 것이 가장 의미가 있는지는 상황에 따라 다릅니다. 일부 패키지만 설치합니까? 이것은 일반적으로 번역하기 쉽지만(매우 간단한 것들은 sudo apt update && sudo apt upgrade
호환되기도 함), bash 세션에서 실행해도 크게 문제가 되지 않습니다.
이제 "새 프로그램 다운로드"와 관련하여 두 가지 시나리오가 있습니다.
어느 쪽이든 당신의 프로그램일 뿐입니다달리기. "cargo를 실행"하거나 "nvim을 실행"해야 하는 것처럼 말이죠. 이 경우 프로그램은 쉘 스크립트, Python 스크립트, 컴파일된 Rust, Go 또는 C++ 프로그램 등 필요한 모든 인터프리터에 의해 간단히 실행되므로 문제가 없습니다. 이를 실행하면 OS가 이를 실행하는 방법을 파악하고( #!
스크립트 상단의 줄을 읽어 ) 완료됩니다.
또는 프로그램이 필요한 쉘 스크립트입니다 source
. 문서에서 "put source nvm
~/.bashrc"(일반적으로 철자도 로 표시되며 . nvm
보기 어려운 점이 앞에 표시됨)를 지시하는 경우가 이에 해당합니다. 이러한 경우에는 fish 호환 버전이나 대체 버전을 찾아야 하거나 bash 스크립트에서 fish 환경을 수정할 수 있는 방법을 사용해야 합니다.베이스또는다시 하다.
내 경험에 따르면 프로젝트가 물고기 지원을 받으면서 후자는 점점 더 드물어지고 있습니다. 예를 들어, Python이 "환경을 활성화하려면 venv/bin/activate 소스를 입력하세요"라고 말하면 Python의 venv 모듈은 기본적으로 Fish 지원과 함께 제공되기 때문에 venv/bin/activate.fish 소스만 사용하면 됩니다.