환경 간에 구성을 제대로 유지하려면 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
이 스크립트를 사용하는 것이 좋습니다.