답변:
폴더 별명으로 cd를 활성화하려면 Mac OS X Hints 에서 다음을 발견했습니다 .
다음 명령을 사용하여 아래 소스 코드를 컴파일하십시오.
gcc -o getTrueName -framework Carbon getTrueName.c
소스와 같은 디렉토리에 'getTrueName'실행 파일이 생성됩니다. PATH에 추가하거나 / usr / bin 또는 / usr / local / bin에 직접 복사하면 쉽게 액세스 할 수 있습니다.
getTrueName에 대한 C 소스 코드 (텍스트를 복사하고 파일을 홈 디렉토리에 getTrueName.c로 저장) :
// getTrueName.c
//
// DESCRIPTION
// Resolve HFS and HFS+ aliased files (and soft links), and return the
// name of the "Original" or actual file. Directories have a "/"
// appended. The error number returned is 255 on error, 0 if the file
// was an alias, or 1 if the argument given was not an alias
//
// BUILD INSTRUCTIONS
// gcc-3.3 -o getTrueName -framework Carbon getTrueName.c
//
// Note: gcc version 4 reports the following warning
// warning: pointer targets in passing argument 1 of 'FSPathMakeRef'
// differ in signedness
//
// COPYRIGHT AND LICENSE
// Copyright 2005 by Thos Davis. All rights reserved.
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free
// Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
// MA 02111-1307 USA
#include <Carbon/Carbon.h>
#define MAX_PATH_SIZE 1024
#define CHECK(rc,check_value) if ((check_value) != noErr) exit((rc))
int main ( int argc, char * argv[] )
{
FSRef fsRef;
Boolean targetIsFolder;
Boolean wasAliased;
UInt8 targetPath[MAX_PATH_SIZE+1];
char * marker;
// if there are no arguments, go away
if (argc < 2 ) exit(255);
CHECK( 255,
FSPathMakeRef( argv[1], &fsRef, NULL ));
CHECK( 1,
FSResolveAliasFile( &fsRef, TRUE, &targetIsFolder, &wasAliased));
CHECK( 255,
FSRefMakePath( &fsRef, targetPath, MAX_PATH_SIZE));
marker = targetIsFolder ? "/" : "" ;
printf( "%s%s\n", targetPath, marker );
exit( 1 - wasAliased );
}
~ / .bash_profile에 다음을 포함 시키거나 다음 내용으로 ~ / .bash_profile 파일을 새로 만드십시오.
function cd {
if [ ${#1} == 0 ]; then
builtin cd
elif [ -d "${1}" ]; then
builtin cd "${1}"
elif [[ -f "${1}" || -L "${1}" ]]; then
path=$(getTrueName "$1")
builtin cd "$path"
else
builtin cd "${1}"
fi
}
수정 된 .bash_profile을로드하려면 터미널을 다시 시작해야합니다.
Yosemite 10.10.2 & gcc 4.2 (Xcode 6.2)에서 테스트되었으며 작동합니다.
superuser.com 에서도 비슷한 방법을 사용할 수 있습니다
@klanomath의 답변을 테스트하지는 않았지만 별칭의 대상을 얻기 위해 Python 라이브러리가 있었지만 Carbon 지원은 Apple 프레임 워크에서 제거되었습니다. Objective C에서 https://stackoverflow.com/a/21151368/838253을 참조 하십시오 .
가장 좋은 방법은 심볼릭 링크를 사용하는 것이지만 불행히도 Finder에서는 심볼릭 링크를 만들 수 없습니다.
심볼릭 링크를 만드는 OS X 서비스를 작성했습니다 (Finder와 터미널 모두에서 지원됨). Finder 워크 플로우에서 다음 bash 스크립트를 실행합니다. 불행히도 Automator 코드를 읽을 수있는 형식으로 게시 할 수없는 것 같습니다.
for f in "$@"
do
fileSuffix="link"
fileExists=`ls -d "$f $fileSuffix"`
fileNumber=0
until [ $fileExists=="" ]; do
let fileNumber+=1
fileSuffix="link $fileNumber"
fileExists=`ls -d "$f $fileSuffix"`
done
echo "$f $fileSuffix"
ln -s "$f" "$f $fileSuffix"
done
curFolder
및 linkFile
변수가 사용되지 않으므로 왜 거기에 있습니까? 예를 들어 비교 연산자 주위에 공백이 있어야하며 레거시 백틱 대신에 $fileExists == ""
사용 $(..)
을 고려하십시오 .
여기에 내가 걸릴 것입니다.
이 기능을 .profile에 추가하고로드하십시오.
function cd {
thePath=`osascript <<EOD
set toPath to ""
tell application "Finder"
set toPath to (POSIX file "$1") as alias
set theKind to kind of toPath
if theKind is "Alias" then
set toPath to ((original item of toPath) as alias)
end if
end tell
return posix path of (toPath)
EOD`
builtin cd "$thePath";
}
최신 정보.
builtin cd
@klanomath answer에 표시된 줄을 사용하여 cd 명령을 무시할 수 있습니다. 이제 다음을 사용할 수 있습니다.
cd /path/to/example-alias
또는
cd /path/to/example
이 함수는 별칭의 원래 경로 또는 원래 경로로 돌아가서 cd해야합니다.
기호 링크 (UNIX 별명)는 Finder 내의 Finder 별명과 동일하게 보이지만 서로 다른 두 가지 별명 유형입니다.
심볼릭 링크는 리소스가 이동하거나 연결이 끊어진 드라이브 나 공유에서 각각 연결되는 경로 만 유지하며 영구적으로 또는 일시적으로 끊어집니다.
Finder 별명은 기술적으로 Finder에 대한 지시 사항이있는 일반 파일입니다. Finder는이 정보를 사용하여 이동 된 대상 파일 / 디렉토리를 어느 정도 찾을 수 있습니다. 별칭의 대상 리소스가 탑재 된 네트워크 공유 지점에있는 경우 공유 키를 열 때 공유 지점에 로그인하는 데 사용할 키 체인 항목에 대한 정보도 보유합니다.
따라서 Finder 별명 파일을 읽기 위해 스크립트 또는 프로그램을 작성하지 않으면 디렉토리로 사용되지 않고 터미널의 파일로 사용됩니다.
또는 현재 Finder 별명을 제거하고 대신 기호 링크를 작성할 수 있습니다. ln -s /path/to/original
현재 디렉토리에 심볼릭 링크를 만드는 것이 명령입니다 . 경로는 전체 또는 상대 경로 일 수 있습니다.
osascript[9807:7154723] CFURLGetFSRef was passed an URL which has no scheme (the URL will not work with other CFURL routines)
이 팁 의 도움으로 위의 경고 메시지를 제거하기 위해 @markunte의 applescript를 수정했습니다.
# Overriding cd to enable make alias available in CLI
function cd {
if [ ${#1} == 0 ]; then
builtin cd
elif [ -d "${1}" ]; then
builtin cd "${1}"
elif [[ -f "${1}" || -L "${1}" ]]; then
thePath=`osascript <<EOD
set toPath to ""
tell application "Finder"
set toPath to (POSIX file ((do shell script "pwd")&"/$1")) as alias
set theKind to kind of toPath
if theKind is "Alias" then
set toPath to ((original item of toPath) as alias)
end if
end tell
return posix path of (toPath)
EOD`
builtin cd "$thePath";
else
builtin cd "${1}"
fi
}
대부분의 운영 체제 (Windows 제외)와 마찬가지로 OS X은 Bash 스크립트를 지원합니다. 먼저 바탕 화면 (또는 원하는 위치)에 파일을 만듭니다.
~ / Desktop / PlexConnect.sh를 터치 한 다음 파일이 실행 가능하도록 파일의 권한을 설정합니다.
chmod + x ~ / Desktop / PlexConnect.sh 그런 다음 선택한 텍스트 편집기를 사용하여 스크립트의 내용을 편집 할 수 있습니다. 시스템이 쉘 (Bash)을 사용하여 스크립트를 실행하는 것을 알 수 있도록 다음 줄로 시작해야합니다.
그런 다음 파일을 두 번 클릭하여 터미널을 시작하고 실행할 수 있습니다.
그러나이를위한보다 우아한 해결책은 명령을 실행하는 AppleScript 응용 프로그램을 만드는 것입니다. "스크립트 편집기"응용 프로그램을 열고 다음에 붙여 넣습니다.
관리자 권한으로 "/Applications/PlexConnect-master/PlexConnect.py"쉘 스크립트를 수행하십시오. "애플리케이션"으로 저장하십시오. 원하는 이름을 지정하십시오. 열면 OS X의 표준 암호 프롬프트가 표시되고 스크립트를 실행 한 다음 자체적으로 닫힙니다.