¿Cómo ir al alias desde la terminal?

5

Por alias, me refiero al acceso directo de carpeta creado cuando haces clic con el botón derecho en una carpeta en el Finder y seleccionas "Crear alias". Puedo atravesar enlaces simbólicos en la Terminal con cd , pero no funciona en alias: bash: cd: example-alias: Not a directory . ¿Es posible cambiar el directorio a un destino de alias en la Terminal?

    
pregunta Steven 13.04.2015 - 19:49

4 respuestas

4

Para habilitar cd'ing en un alias de carpeta, he encontrado lo siguiente en Sugerencias de Mac OS X .

Compile el código fuente a continuación con el siguiente comando:

gcc -o getTrueName -framework Carbon getTrueName.c

Esto creará el ejecutable 'getTrueName' en el mismo directorio que la fuente. Puede agregarlo a su RUTA, o simplemente copiarlo directamente a / usr / bin o / usr / local / bin para que sea fácil de acceder.

Código fuente de C para getTrueName (copie el texto y guarde el archivo como getTrueName.c en su directorio de inicio ):

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

Incluya lo siguiente en ~ / .bash_profile o cree un nuevo archivo ~ / .bash_profile con el siguiente contenido:

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
}

Probablemente tenga que reiniciar Terminal para cargar su .bash_profile modificado.

Probado en Yosemite 10.10.2 & gcc 4.2 (Xcode 6.2) y funciona.

Un enfoque similar está disponible en superuser.com

    
respondido por el klanomath 13.04.2015 - 20:37
3

No he probado la respuesta con @klanomath, pero solía haber una biblioteca de Python para obtener el objetivo de un alias, pero el soporte de Carbono se eliminó de los marcos de Apple. Se puede hacer en el Objetivo C, consulte enlace .

La mejor opción es usar enlaces simbólicos, pero desafortunadamente Finder no te permite crearlos.

He escrito un servicio OS X que crea enlaces simbólicos (que son compatibles tanto con Finder como con Terminal). Esto ejecuta la siguiente secuencia de comandos bash en un flujo de trabajo del Finder. (Lamentablemente, no parece posible publicar el código de Automator en un formato legible).

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
    
respondido por el Milliways 13.04.2015 - 21:18
1

Aquí está mi opinión sobre esto.

agregue y cargue esta función en su perfil.

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

Actualización.

Utilicé la línea builtin cd que se muestra en @klanomath answer, que te permite anular el comando cd. Así que ahora podemos usar:

cd /path/to/example-alias

o

cd /path/to/example

La función debería regresar y guardar la ruta original de los alias originales o la ruta normal.

    
respondido por el markhunte 15.04.2015 - 00:57
0

Si bien un enlace simbólico (alias de UNIX) tiene el mismo aspecto que un alias de Finder dentro de Finder, son dos tipos completos de alias diferentes.

Un enlace simbólico solo mantendrá la ruta a la que conduce y se interrumpirá de forma permanente o temporal si el recurso se mueve, o en una unidad o recurso desconectado, respectivamente.

Un alias del Finder es técnicamente un archivo ordinario con instrucciones para el Finder. El Finder puede usar esta información para localizar un archivo / directorio de destino movido en cierta medida. Si un recurso objetivo de un alias se encuentra en un punto compartido de red montado, también contiene información sobre qué elemento de Llavero usar para iniciar sesión en el punto compartido para abrirlo.

Entonces, a menos que escriba un script o programa para leer el archivo de alias del Finder, no lo usará como un directorio, sino como un archivo en la Terminal.

Alternativamente, puede eliminar el alias actual del Finder y crear un enlace simbólico en su lugar. El comando sería ln -s /path/to/original para crear un enlace simbólico en el directorio actual. La ruta puede ser una ruta completa o relativa.

    
respondido por el Phoenix 13.04.2015 - 20:11

Lea otras preguntas en las etiquetas