Я хотел бы использовать скрипт оболочки bash из SendTo
папки. Когда я помещаю ярлык в пакет или исполняемый файл в SendTo
папку, он отображается в Send To
подменю контекста оболочки , но когда ярлык указывает на скрипт оболочки, это не так.
ОС, на которой я тестирую это Win7 Home Premium SP1. Расширение, .sh
которое было связано с MinGW's bash.exe.
Мой сценарий оболочки имеет .sh
расширение, и я попытался отсоединить .sh
расширение (я думаю, что MinGW установил его изначально, но это не сработало), используя эту утилиту, и попытался повторно связать его с bash, используя:
ftype ShellScript=c:\MinGW\msys\1.0\bin\bash.exe -c "'%1' %2"
assoc .sh=ShellScript
в командной оболочке администратора. Хотя это работает в командной строке и в оболочке Проводника (с помощью двойного щелчка), оно не будет отображаться в Send To
меню и не будет принимать параметр, перетаскивая файл поверх сценария напрямую.
Кто-нибудь знает, как я это сделаю?
Move to *dir*
), поэтому я думаю, что он не принимает параметры по какой-то причине, даже если он выполняется при двойном щелчке. Есть идеи, почему это так?c:\MinGW\msys\1.0\bin\bash.exe -c C:\Path\To\Your\Script.sh
в качестве цели для ярлыка вSendTo
?Ответы:
Это включит Drag & Drop для любого скрипта. Вы можете поместить один из них в папку SendTo и использовать его впоследствии.
Экспорт реестра:
На самом деле шестнадцатеричная часть
"C:\cygwin\bin\bash.exe -c "source $0;read" %1 %*"
кодируется в экспорте.Возможно, вы захотите удалить
read
после тестирования, чтобы вы могли писать сценарии, которые просто выполняют задачу, не выходя из открытого окна. Если вам это нужно для отдельных сценариев, вы всегда можете добавить его в конец.Используйте
assoc .ext=ShellFile
после импорта, чтобы связать любое расширение файла с этой функцией. DropHandler в этом примере работает для Windows XP и Windows 7 (возможно, также и для других) и в основном означает «выполнить команду со всеми удаленными именами файлов в качестве аргументов».Используйте это как скрипт (
echotest.ext
) для проверки основных функций:источник
source
исключения вызова другой оболочки и ответа на мой вопрос о перетаскивании. К сожалению, это не главный вопрос, поэтому, к сожалению, вы не получите награду. Но спасибо. Я пытался понять это без успеха. (Y)source
, это действительно хороший момент. @Adrian: Теперь ты знаешь, почему SU не позволил тебе наградить награду слишком быстро. ИМХО Ответ Скузи заслуживает награды, потому что его ответ более элегантный; если вы чувствуете себя плохо из-за этого,;)
вы все равно можете принять мой ответ (поскольку это также решило вашу проблему), но я бы тоже согласился только с upvote.Вот как передать аргумент в функцию
bash
оболочки черезSendTo
(или с помощью перетаскивания). В качестве примера я использовал встроенныйecho
. Установите цель для вашей ссылки вSendTo
папке следующим образом:Здесь
$0
обозначает первый аргумент после заданной командной строки a) , то есть полное имя файла, для которого было выполнено действие sendto.read
держит окно открытым, чтобы вы могли прочитать сообщение. (Я проверил это с Cygwin'sbash
, но я думаю, что Mingwbash
должен работать тоже.)В вашем случае цель должна быть
Теперь ваш скрипт может обрабатывать имя файла. Но обратите внимание, что имя файла передается сценарию в качестве первого аргумента, поэтому внутри сценария имя файла указывается как
$1
.Наконец, что не менее важно, вот два скриншота в качестве резюме:
а) Вы цитировали
man bash
:Чтобы понять это, используйте, например, следующую целевую строку:
Это напечатает
This is Foo
, анапечатает
This is Baz
. Таким образом, «строка» - это все, что находится между апострофами, иFoo Bar Baz
это аргументы.источник
Если Windows отказывается ссылаться на файл .sh, вы можете попробовать использовать файл .bat, который вызывает скрипт .sh.
Если это не сработает, попробуйте также скомпилировать .bat в .exe.
Быстрый гугл нашел:
Пакетный компилятор
Bat-To-Exe
источник
Попробуйте эту обновленную версию файла REG (обратите внимание, что я использую 64-битную Windows 7; используйте
System32
вместо,SysWOW64
если у вас 32-битная Win7, Vista или XP):Это позволит вашим сценариям оболочки запускаться от имени администратора так же, как и любой файл .bat. Другими словами, он делает все сценарии оболочки UAC-совместимыми при использовании Windows Vista и Windows 7 или 8.
источник