Fish Shell: `file ` which command`가 zsh 및 bash에서는 작동하지만 Fish에서는 작동하지 않는 이유는 무엇입니까?

Fish Shell: `file ` which command`가 zsh 및 bash에서는 작동하지만 Fish에서는 작동하지 않는 이유는 무엇입니까?

zshFish Shell로 전환하기 전에는 에서 다양한 명령을 자주 사용했습니다 which some_command. 예를 들면 다음과 같습니다.

$ file `which zsh`
/opt/local/bin/zsh: Mach-O 64-bit executable arm64
/bin/zsh:           Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64
- Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e
- Mach-O 64-bit executable arm64e]
/bin/zsh (for architecture x86_64): Mach-O 64-bit executable x86_64
/bin/zsh (for architecture arm64e): Mach-O 64-bit executable arm64e

이 작업을 시도하면 fish실패합니다 .

$ which zsh
/opt/local/bin/zsh

$ file `which zsh`
`which: cannot open ``which' (No such file or directory)
zsh`:   cannot open `zsh`' (No such file or directory)

fishbash와 유사한 다른 쉘에 비해 이것이 작동하지 않는 이유는 무엇입니까?

답변1

Fish는 명령 대체에 백틱을 사용하지 않습니다. 대신 parens: file (which zsh)또는 (버전 3.4.0 이상) 을 사용하세요 file $(which zsh). 이것들은 같은 것을 의미합니다.

확인하다Bash 사용자를 대상으로 한 피싱다른 차이점에 대해서는.

답변2

FWIW, 다음을 zsh사용하는 것이 좋습니다.

file -- =zsh

또는:

() {file -- $1:c} zsh

file $(which zsh)(더 이상 사용되지 않는 최신 버전 ) 별칭이나 함수가 정의되지 않고 zsh 명령에 대한 경로가 줄 바꿈으로 시작하거나 끝나지 않고 (공백, 탭, 기본 줄 바꿈 및 nul)을 포함하지 않는 file `which zsh`경우에만 유효합니다 .zsh-$IFS

file -- "$(whence -p zsh)"

더 정확할 것입니다 ( 원래는 csh 사용자를 위한 csh 스크립트 which의 별칭으로 ).zshwhence -c-ccshwhich

에서는 다음 fish과 같이fish관리자는, 명령 대체는 (...)또는 $(...)최신 버전에서도 가능합니다(후자는 큰따옴표 안에 사용할 수 있음).

대조적으로 zsh, 내장된 기능이 fish없으므로 which사용 중인 시스템에 따라 동작이 달라집니다.which비표준이며 종종 깨진 명령입니다..

fishtype내장 명령이 있지만 zsh와 같이 -P강제로 조회하는 옵션을 지원합니다 .$PATHwhence -p

기본적으로 명령 대체는 줄바꿈으로 구분됩니다. 그러나 내부 큰따옴표를 사용하면 $(...)분할이 발생하지 않지만 후행 줄 바꿈은 제거됩니다.

따라서 의 경우 fish더 정확한 버전은 다음과 같습니다.

file -- "$(type -P zsh)"

또는 이전 버전을 사용하세요.

file -- (type -P zsh | string collect)

(if와의 한 가지 차이점은 "$(...)"if가 type출력을 생성하지 않거나 개행 문자만 생성하면 file빈 매개변수 대신 매개변수를 전달하지 않는다는 것입니다.)


1 which zsh개행으로 끝나는 것을 반환 하려면 hash zsh=$'/path/to/some/fileendinginnewline\n\n'예를 들어 여기서는 상당히 인위적인 작업을 수행해야 합니다.

관련 정보