Pbcopy는 심볼릭 링크 시 Pbpaste 역할을 합니다.

Pbcopy는 심볼릭 링크 시 Pbpaste 역할을 합니다.

환경 간에 구성을 제대로 유지하려면 MacOS에서 다음을 수행하는 것이 좋을 것이라고 생각했습니다.

ln -s /usr/bin/pbcopy /usr/local/bin/xclip

그러나 내 xclip심볼릭 링크는 처럼 작동하지 않습니다 pbcopy. 대신 어떤 이유로 pbpaste.


$ echo hello | /usr/bin/pbcopy

$ echo hello | /usr/bin/pbpaste
hello

$ echo hello | /usr/local/bin/xclip
hello

세 번째 명령은 두 번째 명령이 아닌 첫 번째 명령처럼 작동해야 합니다.

어떤 아이디어가 있나요?

답변1

이는 일반적으로 여러 동작을 구현하고 호출 이름을 검사하여 수행할 동작을 결정하는 프로그램에서 발생합니다.

busybox이 기술은 대부분의 일반적인 Linux/Unix 표준 유틸리티를 단일 바이너리 파일로 제공하는 등 일부 널리 사용되는 도구에 사용됩니다 .

이 경우 동일한 바이너리가 "복사" 및 "붙여넣기" 동작을 구현하는 것으로 보이며 기본적으로 "붙여넣기"처럼 동작합니다(호출되는 이름이 정확히 일치하지 않는 한 pbcopy).

심볼릭 링크 대신 호출하는 쉘 스크립트를 생성하면 이 문제를 쉽게 해결할 수 있습니다 xclip. pbcopy이는 현재 가지고 있는 것과 대략 동일합니다.

#!/bin/sh
exec pbcopy "$@"

동일한 프로세스에서 실행 exec되는지 확인하면 셸이 대체되고 실행 중에는 셸이 더 이상 존재하지 않습니다.pbcopy

이는 "$@"모든 인수를 그대로 전달 합니다 pbcopy(이전 쉘에서는 ${1+"$@"}인수를 올바르게 처리하지 않는 것과 같은 작업이 필요했지만 현대 쉘 구현에서는 그렇지 않습니다.) 이는 Symlink 메소드를 사용할 때 인수에서 발생하는 것과 동일합니다.

스크립트를 실행 가능하게 만드는 것을 잊지 마세요:

$ chmod +x /usr/local/bin/xclip

xclip예상되는 매개변수가 실제로 해석된 매개변수 와 일치하는지 확실하지 않지만 pbcopy, 내 생각에는 일치해서는 안 될 것 같습니다. 일반적으로 사용되는 인수를 xclip구문 분석된 인수 로 변환하려는 경우에도 pbcopy이 스크립트를 사용하는 것이 좋습니다.

관련 정보