Эквивалентный из % ~dp0 в sh

Я думаю, что из Python 2.7.9 и выше pip поставляется предварительно установленным и будет находиться в папке с вашими сценариями. Поэтому вам нужно добавить папку «scripts» в путь. Mine устанавливается в C: \ Python27 \ Scripts. Проверьте свой, чтобы увидеть, что ваш путь, чтобы вы могли соответствующим образом изменить ниже, затем перейдите в PowerShell, вставьте приведенный ниже код в powershell и нажмите клавишу Enter. После этого перезагрузка и ваша проблема будут решены.

[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27\Scripts", "User")
14
задан Chris Upchurch 8 April 2009 в 08:12
поделиться

6 ответов

Проблема (для Вас) с $0 это, это установлено на любую командную строку, было использование для вызова сценария, не местоположения самого сценария. Это может мешать получать полный путь каталога, содержащего сценарий, который является тем, от чего Вы добираетесь %~dp0 в пакетном файле Windows.

Например, рассмотрите следующий сценарий, dollar.sh:

#!/bin/bash
echo $0

При выполнении его, Вы получите следующий вывод:

# ./dollar.sh
./dollar.sh
# /tmp/dollar.sh
/tmp/dollar.sh

Таким образом для получения полностью определенного имени каталога сценария я делаю следующее:

cd `dirname $0`
SCRIPTDIR=`pwd`
cd -

Это работает следующим образом:

  1. cd к каталогу сценария, с помощью или относительного или полного пути из командной строки.
  2. Получает полный путь этого каталога и хранит его в SCRIPTDIR.
  3. Возвращается к предыдущему рабочему использованию каталога"cd -".
7
ответ дан 1 December 2019 в 14:00
поделиться

Да, Вы можете! Это находится в аргументах.:)

посмотрите на

${0}

объединение этого с

{$var%Pattern}
Remove from $var  the shortest part of $Pattern that matches the back end of $var.

то, что Вы хотите, справедливо

${0%/*}

Я рекомендую Усовершенствованное Руководство по созданию сценариев Bash (который является также, откуда вышеупомянутая информация). Especiall часть при Преобразовании Пакетных файлов DOS к Сценариям оболочки мог бы быть полезен для Вас.:)

Если я неправильно понял Вас, Вам, вероятно, придется объединить это с выводом "pwd". Так как это только содержит путь, сценарий назвали с! Попробуйте следующий сценарий:

#!/bin/bash
called_path=${0%/*}
stripped=${called_path#[^/]*}
real_path=`pwd`$stripped
echo "called path: $called_path"
echo "stripped: $stripped"
echo "pwd: `pwd`"
echo "real path: $real_path

Этому нужна некоторая работа все же. Я рекомендую использовать подход Dave Webb, если это не невозможно.

3
ответ дан 1 December 2019 в 14:00
поделиться

Я пытался найти путь для сценария, который получался из другого сценария. И это было моей проблемой, когда определение источника текста просто копируется в сценарий выполнения вызова, таким образом, 0$ всегда возвращают информацию о сценарии выполнения вызова.

я нашел обходное решение, это только работает в ударе, $BASH_SOURCE всегда имеет информацию о сценарии, в котором это упомянуто. Даже если сценарий получен, он правильно разрешен к исходному (полученному) сценарию.

2
ответ дан 1 December 2019 в 14:00
поделиться

В ударе в соответствии с Linux можно получить полный путь к команде с:

readlink /proc/$/fd/255

и получить каталог:

dir=$(dirname $(readlink /proc/$/fd/255))

Это ужасно, но я должен все же найти иначе.

3
ответ дан 1 December 2019 в 14:00
поделиться

Попробуйте это:

${0%/*}
0
ответ дан 1 December 2019 в 14:00
поделиться

Я попробовал 0$ прежде, а именно:

dirname 0$

и это просто возвращается ".", даже когда сценарий получается другим сценарием:

.../somedir/somescript.sh

0
ответ дан 1 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

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