Terminalden takma ada nasıl gidilir?


9

Takma adla, Finder'da bir klasörü sağ tıklayıp "Takma Ad Oluştur" u seçtiğinizde oluşturulan klasör kısayolunu kastediyorum. Birlikte Terminal'de sembolik bağlantıları geçebilirler cdama diğer adları çalışmaz: bash: cd: example-alias: Not a directory. Terminal'de bir diğer adın hedefini değiştirmek mümkün müdür?


Cevabımı güncelledim
markhunte

Yanıtlar:


5

Bir klasör takma adında cd'ing özelliğini etkinleştirmek için Mac OS X İpuçları bölümünde aşağıdakileri buldum .

Aşağıdaki kaynak kodu aşağıdaki komutla derleyin:

gcc -o getTrueName -framework Carbon getTrueName.c

Bu, kaynak ile aynı dizinde 'getTrueName' yürütülebilir dosyasını oluşturur. PATH'nize ekleyebilir veya doğrudan / usr / bin veya / usr / local / bin'e kopyalayabilirsiniz, böylece erişmesi kolaydır.

GetTrueName için C kaynak kodu (metni kopyalayın ve dosyayı ana dizininize getTrueName.c olarak kaydedin):

// 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 );
  }

Aşağıdakileri ~ / .bash_profile dosyasına ekleyin veya aşağıdaki içeriğe sahip yeni bir dosya ~ / .bash_profile oluşturun:

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
}

Değiştirilmiş .bash_profile dosyanızı yüklemek için büyük olasılıkla Terminal'i yeniden başlatmanız gerekir.

Yosemite 10.10.2 ve gcc 4.2'de (Xcode 6.2) test edilmiştir ve çalışır.

Benzer bir yaklaşım superuser.com adresinde mevcuttur.


3

Cevabı @klanomath tarafından test etmedim, ancak bir takma adın hedefini elde etmek için bir Python kütüphanesi vardı, ancak Karbon desteği Apple çerçevelerinden kaldırıldı. Amaç C'de yapılabilir, bkz. Https://stackoverflow.com/a/21151368/838253 .

En iyi bahis sembolik bağlantıları kullanmaktır, ancak ne yazık ki Finder bunları oluşturmanıza izin vermez.

Simgeleri (hem Finder hem de Terminal tarafından desteklenir) oluşturan bir OS X Hizmeti yazdım. Bu, Finder iş akışında aşağıdaki bash betiğini çalıştırır. (Maalesef Automator kodunu okunabilir bir formatta yayınlamak mümkün görünmüyor).

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

1
Bir cümlede "En iyi bahis sembolik bağlantıları kullanmaktır, ancak ne yazık ki Finder bunu desteklemiyor" diyorsunuz . ve sonra "... hem bulucular hem de Terminal tarafından desteklenen) semboller oluştururlar ve bunlar birbirleriyle çelişiyor gibi görünür, bu yüzden " Bulucu bunu desteklemiyor " iddialı olarak yeniden yazmayı düşünün . Ayrıca curFolderve linkFiledeğişkenleri kullanılmaz, neden oradalar? Karşılaştırma operatörünün çevresinde boşluklar bulunmalıdır $fileExists == ""ve $(..)eski ters tırnaklar yerine kullanmayı düşünün .
user3439894

@ user3439894 ifadeler değişti. Kod hakkında haklısın. Bunu Mac'te aldıktan kısa bir süre sonra 2011'de yazdım ve o zamandan beri çalıştı ve o zamandan beri bakmadım. Kullanılmayan değişkenler muhtemelen testten çıkarılır.
Milliways

3

İşte bunu benim almam.

bu işlevi .profile dosyasına ekleyin ve yükleyin.

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";
}

Güncelleme.

builtin cd @ Klanomath cevabında gösterilen ve cd komutunu geçersiz kılmanızı sağlayan satırı kullandım . Şimdi şunu kullanabiliriz:

cd /path/to/example-alias

veya

cd /path/to/example

İşlev dönmeli ve cd takma adı orijinal yolunun orijinal yoluna veya normal yoluna gitmelidir.


1

Sembolik bir bağlantı (UNIX diğer adı) Finder'ın içindeki Finder diğer adıyla aynı gibi görünse de, bunlar iki farklı türde diğer addır.

Sembolik bir bağlantı sadece yolunu tutar ve kaynak hareket ettirilirse veya bağlantısı kesilmiş bir sürücüde veya paylaşımda kalıcı veya geçici olarak kesilir.

Finder takma adı teknik olarak Finder talimatları içeren sıradan bir dosyadır. Finder, taşınan bir hedef dosyayı / dizini belirli bir dereceye kadar bulmak için bu bilgileri kullanabilir. Bir takma adın hedef kaynağı bağlı bir ağ paylaşım noktasındaysa, açmak için paylaşım noktasına oturum açmak için hangi Anahtarlık öğesinin kullanılacağı bilgisini de tutar.

Bu nedenle, Finder takma adını okumak için bir komut dosyası veya program yazmazsanız, bu dosyayı bir dizin olarak değil, Terminal'de bir dosya olarak kullanır.

Alternatif olarak, geçerli Finder takma adını kaldırabilir ve yerinde sembolik bir bağlantı oluşturabilirsiniz. Komut ln -s /path/to/original, geçerli dizinde sembolik bir bağlantı oluşturmak olacaktır . Yol, tam veya göreli bir yol olabilir.


1
  1. @ markhunte'nin el yazması çalıştı, ancak bir uyarı mesajı vardı: osascript[9807:7154723] CFURLGetFSRef was passed an URL which has no scheme (the URL will not work with other CFURL routines)

Bu yardımı ile ucu , ben modifiye @ markunte AppleScript kaldır uyarısı iletinin üzerindeki

  1. @ markhunte'nin el yazması biraz yavaştır çünkü her zaman el yazısını çağırır. Yani @ klanomath'ın yukarıda listelenen ipucunu izleyerek, betiği yalnızca hedef nesne takma ad olduğunda el yazmasını çağırmak için değiştirdim.
# 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
}

-2

Çoğu işletim sistemi gibi (Windows dışında), OS X Bash komut dosyalarını destekler. Öncelikle dosyayı Masaüstünüzde (veya istediğiniz herhangi bir konumda) oluşturun:

~ / Desktop / PlexConnect.sh öğesine dokunun. Ardından, dosyanın izinlerini yürütülebilir olacak şekilde ayarlayın:

chmod + x ~ / Desktop / PlexConnect.sh Daha sonra komut dosyasının içeriğini istediğiniz metin düzenleyicinizle düzenleyebilirsiniz, sistemin kabuk (Bash) kullanarak çalıştırmayı bilmesi için aşağıdaki satırla başladığından emin olun:

! / Bin / bash

Daha sonra dosya çift tıklatılarak Terminal başlatılabilir ve yürütülebilir.

Bununla birlikte, bunun için daha zarif bir çözüm, komutu sizin için çalıştıran bir AppleScript uygulaması oluşturmak olabilir. "Script Editor" uygulamasını açın ve aşağıdakileri yapıştırın:

yönetici ayrıcalıklarına sahip kabuk komut dosyası "/Applications/PlexConnect-master/PlexConnect.py" yapın Bunu "Uygulama" olarak kaydedin ve istediğiniz gibi adlandırın. Açtığınızda, OS X'in standart parola istemini verir, komut dosyasını yürütür, sonra kendini kapatır.


Bu, üstte sorulan soruya nasıl cevap veriyor? Açıklığa kavuştururken lütfen yayınınızın biçimlendirmesini de düzeltebilir misiniz?
nohillside

Bunun, soruda sorulan diğer adlarla ne ilgisi var? Lütfen yanıtınızı Yardım Merkezi'nde açıklandığı şekilde biçimlendirin apple.stackexchange.com/help/formatting
user151019
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.