Как я заставляю 'realpath' находить мою символьную ссылку?

У меня есть два предложения:

  1. Замените свой вызов к scp с одним к rsync, который разработан для обработки просто этого вида ситуации.
  2. Вместо того, чтобы использовать некоторое время цикл, просто используйте шарик для вызова файлов непосредственно. Так как Ваша команда находки использует maxdepth 1, можно просто сделать rsync -t *.tar.gz.* username@host:/backup/. Rsync будет заботиться о проверке, которая файлы и уже не копируются и точность тех файлов. Это только отправит любые изменения через соединение.
13
28.04.2014, 06:37
6 ответов
[113895] Если вам необходимо разрешить (или исследовать) симлинк, вы можете использовать платформонезависимую bash библиотеку realpath-lib. По умолчанию она эмулирует читаемую ссылку и будет работать на Mac или Unix. Ее можно найти на [114371]Github[114372] или [114373]Bitbucket[114374] и она свободна.[1299]Но звучит так, как будто вы хотите просто сделать python2 (а не ./python2) из вашего локального (рабочего) каталога. Возможно, это можно сделать с псевдонимом в вашем .bashrc или иначе вам понадобится добавить рабочую директорию (которая содержит вашу сим-ссылку) в переменную окружения PATH. Это также может быть сделано только для текущей сессии или в файле .bashrc для будущих сессий. Это может быть решением только для конкретного пользователя. [12100]Другим вариантом, который работал бы для всех пользователей, было бы создание сим-ссылки python2 на /usr/bin/python в другом каталоге по пути, скажем, в /usr/local/bin. Возможно что-то вроде:[12101]Тогда любой пользователь или скрипт должен найти команды python или python2. Конечно, этот вариант требует привилегий администратора (root) для установки. [113902]
3
27.01.2020, 19:53
[113913] Я полагаю, что вы используете систему Apple для управления и переключения между несколькими версиями одной и той же программы. Вы можете выполнять то, что хотите, менее элегантно, но без проблем, с помощью следующего скрипта, названного [114383]python2[114384]:[12126]Сделайте его исполняемым ([114385]chmod +x python2[114386]), и вы в деле. [12127]Объяснение проблемы:[12128]Когда вы запускаете [114387]/usr/bin/python[114388], он находит и выполняет [114389]python2.7[12129]в том же каталоге.[114392] Ваша символическая ссылка не работает, потому что система следует по сим-ссылке на [114393]/usr/bin[114394], затем ищет и [114395]не находит[12130]python2[114398] там. Вы можете сделать еще один шаг вперед, используя "жесткую ссылку" вместо символической ссылки:[12131]Теперь нет символической ссылки, за которой нужно следовать, только два имени файлов для одного и того же файла (inode). Но теперь у меня не получается со следующим сообщением:[12132]Обратите внимание на [114399]python22.7[114400]: Фреймворк добавляет [114401]2.7[114402] к имени, которое вы создали! Вместо того, чтобы пытаться разгадать это и создать лес ссылок, соответствующий его ожиданиям, я рекомендую вам [114403] держаться подальше от фреймворка управления версиями, [114404] и использовать решение, предложенное выше. [12133]PS. Возможно, есть лучшее решение: Если Вы объясните, что Вам нужно сделать для начала (зачем нужно давать [114405]python2[114406] в качестве псевдонима для [114407]python[114408]), то, вероятно, кто-то может помочь Вам сделать это по-другому. Это известно как "XY проблема" на жаргоне обмена стеками...[113926].
15
27.01.2020, 19:53
[116813] Я не понимаю - как вы считаете, что оберточная [117310] связь [117311] нормальная, но не оберточная [117312] сценарий [117313]? Либо то, либо другое - это просто уровень идирекции. И разве вам все равно не придется инструктировать своих пользователей, чтобы они вызывали его только из определенной директории? glarys modules

В любом случае, вы можете получить текущую рабочую директорию в [117314]$PATH[117315], конечно:

Пожалуйста, вытащите . из вашей [117316]$PATH[117317]. Это ужасная идея.[116818]

0
27.01.2020, 19:53
[113851] Вы можете использовать Unix-команду [114346]readlink[114347], чтобы узнать физический путь ссылки.

Примеры

Скажем, у меня есть следующая ссылка:

C:\Ruby\bin> cd /d D:\
D:\>

Чтобы найти значение символической ссылки, необходимо

C:\Ruby\bin> cd D:\
C:\Ruby\bin> D:
D:\>
$ читать ссылку /usr/bin/etags. /и т.д./альтернативы/эмаки.яйца ПРИМЕЧАНИЕ: [114764] Вышеприведенный результат может быть еще одним звеном. Для решения этой проблемы смотрите #2 ниже.Чтобы узнать абсолютный путь к значению, символическая ссылка указывает на

$ читать ссылку -f /usr/bin/etags /мусорные ящики/клейма

1
27.01.2020, 19:53

Попробуйте:

ln -s /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /usr/local/bin/python2
2
27.01.2020, 19:53

Ответ @alexis, версия Python в /usr/binне является настоящим Python.

Это должно быть очевидно по трем причинам:

  1. Ошибка, которую мы получаем, не является той, которую обычно выдает python. Поведение python заключается не в том, чтобы искать другого python, а в том, чтобы выполнять сценарии python.

  2. Если вы вычисляете shasum /usr/bin/pythonи фактически запущенный python2.7:

shasum /usr/bin/python
3782d9ab14b35037c9c7fb665439a5fa695c54a6  /usr/bin/python
shasum /usr/bin/python2.7
476fa96c80ac26a85b2d3b01ddfd19e513660c2c  /usr/bin/python2.7

Они совершенно разные. Кроме того, размеры файлов различаются на ~20 КБ :

.
ll /usr/bin/python
-rwxr-xr-x  1 root  wheel  66880 May 17  2019 /usr/bin/python

против

ll /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
-rwxr-xr-x  1 root  wheel  43104 May 17  2019 /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
  1. Наконец, вы можете декомпилировать python2.7 и python и исследовать символы. Это немного выходит за рамки того, «как символически связать python2.7 с python2 на osx».

Итак, (, как показывает ошибка,)/usr/bin/pythonразворачивается и ищет/usr/bin/python2.7:

ll /usr/bin/python2.7
lrwxr-xr-x  1 root  wheel  75 Jul  1  2019 /usr/bin/python2.7 ->../../System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7

Вот почему следующие работы (любезно предоставлены ответом @liangmin -li):

    ln -s /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /usr/local/bin/python2
1
26.02.2020, 14:32

Теги

Похожие вопросы