LINUX.ORG.RU
ФорумTalks

Есть ли реализация языка виндовых *.bat для Linux?

 ,


0

2

Поскольку сегодня суббота, которая как бы понедельник, но с ощущениями как от пятницы в голову приходят разные странные мысли.

Пробовал поискать в гугле, оказывается такая мысль не меня одного посещала, судя по вопросам на разных форумах, но вроде бы никто не запилил еще такое.

Итак, прикольно, если виндовые батники исполнять можно будет.

#!/usr/bin/winbat

@echo off 
dir %1\*.zip /s/b >unziplist.lst
for /F "eol= tokens=* delims=" %%A in (unziplist.lst) do unzip %%A

Другой вариант - тулза, которая их не исполнять будет, а конвертировать в скрипт на bash или еще чем.

★★★★★
Ответ на: комментарий от Ford_Focus

то зачем забивать себе голову говнобэйсиками?

В смысле? Под виндой не надо забивать себе голову башем. Он просто там совсем не нужен. Т.Е. воообще. Все можно решить средствами самой винды, без гемора с кривым башем ( под виндой он реально кривой ). Если не хватает функционала, например в cmd.exe плохо организована работа с текстом, то пихаешь нужные утилиты — sed, grep, awk и т.д. Если надо посчитать, то соответственно ставишь консольный калькулятор, да тот же bc. Скажешь что это плохо? Но и bash сам по себе ничего не может, даже создать директорию.

Да и линукс не нужен вообщем-то.

TGZ ★★★★
()

лучше используй питон для скриптинга

dimon555 ★★★★★
()
Ответ на: комментарий от TGZ

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

Ford_Focus ★★★★★
()

Прекрасная идея для нового проекта. Сделать мини-cmd окружение, с набором утилиток с идентичным синтаксисом и интерпретатором bat-файлов.

Можно назвать swung, например. «ws» on «gnu», и заодно прошедшее от swing.

Правда, вряд ли кому шибко понадобится, но поупражняться в написании интерпретатора и небольших утилиток - самое оно.

zhuravlik ★★★★
()
Ответ на: комментарий от Ford_Focus

я про кроссплатформу

А ну тогда, да. Но все равно надо использовать то, что удобно, а не то что кроссплатформенно. Как ты через bash будешь обращаться к свойствам системы, я честно говоря не представляю. Например, как ты узнаешь флешка ли под буквой Q:? Я лично не знаю. Вряд ли, ИМХО, можно рассматривать bash, как полнофункциональный инструмент. Да и что можно такого на bash.exe-скриптах, чего нельзя простыми батниками?

TGZ ★★★★
()
Ответ на: комментарий от TGZ

диски не знаю, а часть инфы можно погрепать из systeminfo.

можно такого на bash.exe-скриптах, чего нельзя простыми батниками?

c точки зрения сабжа этого ресурса - «практически всё» против «абсолютно ничего»

Ford_Focus ★★★★★
()
Ответ на: комментарий от Ford_Focus

«практически всё» против «абсолютно ничего»

Это главное заблуждение. Но переубеждать не буду. А из systeminfo ты дофига не нагрепаешь.

TGZ ★★★★
()
Ответ на: комментарий от praseodim

На самом деле смысл может быть

Как практикующий bat-писатель ответственно заявляю — смысла нет. То есть вообще нет. Невозможно (контрпримеры приветствуются) сформулировать задачу, разрешимую только средствами .bat и ничем другим при прочих равных

dexpl ★★★★★
()
Ответ на: комментарий от TGZ

Например, как ты узнаешь флешка ли под буквой Q:?

Встречный вопрос — как программно (bat-ником, vbscript'ом или, на худой конец powershell'ом) определить тип носителя под той или иной буквой?

что можно такого на bash.exe-скриптах

1) host_name=`hostname` (имя хоста). Отличие от %COMPUTERNAME% в том, что последнее всегда в верхнем регистре, что не всегда удобно

2) cp * \path\to\directory (* в имена файлов в текущем каталоге раскрывает bash. Разумеется, для того, чтобы это сработало так, как задумано, необходим cp.exe)

3) .bashrc, .bash_profile, .bash_history (Аналогов в .bat/VBScript/powershell просто нет)

4) существующие отлаженные bash-скрипты проще перенести на винду установкой на ней bash.exe (при условии наличия нужных скриптам cli-утилит, разумеется)

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Встречный вопрос — как программно (bat-ником, vbscript'ом или, на худой конец powershell'ом) определить тип носителя под той или иной буквой?

Легко через wmi-свойства

1) host_name=`hostname` (имя хоста). Отличие от %COMPUTERNAME% в том, что последнее всегда в верхнем регистре, что не всегда удобно

А как же hostname.exe? И каким здесь боком верхний регистр? Напиши хоть %сOмPuTeRnAmE% CMD в отличии от bash регистронезависима.

cp * \path\to\directory

И чего? Ты думаешь нельзя скопировать по маске с помощью внутренней copy или xcopy.exe?

3) .bashrc, .bash_profile, .bash_history (Аналогов в .bat/VBScript/powershell просто нет)

Ты просто не в теме. $profile в гуглосамообразование.

4) существующие отлаженные bash-скрипты проще перенести на винду установкой на ней bash.exe (при условии наличия нужных скриптам cli-утилит, разумеется)

Не вижу смысла. Они возможно не будут работать. И их придется отлаживать снова. Кроме того требуются дополнительные утилиты, которые подчас будут теряться в кодировках, особенно при совместном использовании с виндовыми тулзами, и все придется пускать через iconv, что дополнительный костыль.

Правильным, я считаю, использование некоторых гнутых утилит. Как дополнительный функционал. Либо изначально писать повешелл-скрипты, которые по возможностям сравнимы скорее с перлом или питоном, чем с баш-скриптами.

TGZ ★★★★
()
Ответ на: комментарий от TGZ

на онтопике в батниках я не сделаю вообще ничего. совсем.

Ford_Focus ★★★★★
()
Ответ на: комментарий от Artificial_Thought

Это не ответ.

Просто надо выполнить wmi-запрос:

wmic logicaldisk where name="q:" get drivetype

TGZ ★★★★
()
Ответ на: комментарий от Ford_Focus

срань господня, не дай бог возникнет нужда юзать это по сети

Ну это как бы твое личное мнение. Твое незнание не значит, что другие не знают.

TGZ ★★★★
()
Ответ на: комментарий от TGZ

Легко через wmi-свойства

Так-таки легко?

Напиши хоть %сOмPuTeRnAmE%

Я не о том. Я не про имя переменной, а про ее значение. Каково бы ни было имя компа, значение переменной %COMPUTERNAME% всегда в верхнем регистре

И чего?

А того, что, повторюсь, * в имена файлов разворачивает bash. Внутренний copy либо xcopy.exe раскрывают * самостоятельно

$profile в гуглосамообразование

$profile сам по себе негуглабелен. Конкретизируй, будь добр

Не вижу смысла

А я вижу:

#!/bin/sh

# This script downloads Oracle VM VirtualBox Extension Pack for currently
# installed VirtualBox
# TODO automate deployment of downloaded extpack
# TODO add support for VBox versions other than installed via command line
# parameters

# http://download.virtualbox.org/virtualbox/<version>/Oracle_VM_VirtualBox_Extension_Pack-<version>-<release>.vbox-extpack
ext_url=http://download.virtualbox.org/virtualbox/%s/Oracle_VM_VirtualBox_Extension_Pack-%s-%s.vbox-extpack
dest_dir=/media/dexpl15/scratch/distr

wget -ct0 -P "$dest_dir" $(printf "$ext_url" $(VBoxManage --version | awk -Fr '{ print $1,$1,$2 }'))
Эта самописная красотень сработает безо всяких изменений везде, где есть (либо куда можно поставить) bash, awk, printf, wget и VirtualBox. И такого барахла полно. К слову, .bat'овский аналог подстановки результата команды в другую (т. е. $(command) либо `command`) отвратительно громоздок

dexpl ★★★★★
()
Ответ на: комментарий от TGZ

незнание? тут настройка целевой машины под использование wmi по сети. шаг влево, шаг вправо и ось превращается в решето. хотя она и так решето...

Ford_Focus ★★★★★
()
Ответ на: комментарий от dexpl

А я вижу

Ты меня удивил wgetом? Удивись, что и wget и aria2 и curl — все это активно используется и в винде. Кому это надо, конечно.

Я не про имя переменной, а про ее значение.

Загнать значение в переменную? Да легко:

@echo off
for /f %%i in ('hostname') set "hostname=%%i"
echo %hostname%

$profile сам по себе негуглабелен

Да ну?

TGZ ★★★★
()
Ответ на: комментарий от Ford_Focus

шаг влево, шаг вправо и ось превращается в решето. хотя она и так решето...

Какие там шаги еще? Тебе надо знать имя_компьютера/ip и пароль администратора, как ты что-то превратишь в решето, мне не совсем ясно.

TGZ ★★★★
()
Ответ на: комментарий от TGZ

Ты меня удивил wgetом?

Ты сказал, что не видишь смысла в bash.exe. Я ответил, что смысл есть — bash.exe позволяет запускать в винде скрипты вроде вышеприведенного. Да, не спорю, можно переписать эти несколько строк на NT command language, но зачем — скрипт на bash давным-давно написан и работает

for /f %%i in ('hostname') do set «hostname=%%i»

Та самая отвратительно громоздкая по сравнению с hostname=`hostname` конструкция, про которую я говорил

dexpl ★★★★★
()
Ответ на: комментарий от drBatty

ЗЫЖ так почему не питон?

Да мне он не нужен. Я же не админю ничего, а для себя, для удобства, за глаза хватает простых батников и повершелл

TGZ ★★★★
()
Ответ на: комментарий от dexpl

Я ответил, что смысл есть — bash.exe позволяет запускать в винде скрипты вроде вышеприведенного

А в батнике уже значит нельзя запустить тоже самое? Переписать одну строку...

а самая отвратительно громоздкая по сравнению с hostname=`hostname` конструкция, про которую я говорил

Я и не спорю. Для новичков это кажется громоздко. Я тоже не сразу привык.

TGZ ★★★★
()
Ответ на: комментарий от TGZ

А в батнике уже значит нельзя запустить тоже самое?

Конечно можно, кто спорит? Если бы это изначально писалось на винде и ориентировалось только на винду, то bash.exe не было бы. Скажу по секрету ­— в этом конкретном скрипте не было бы и awk'а с printf'ом.

Переписать одну строку...

А если у меня десяток таких строк? А сотня? Все переписывать? Проще bash.exe и утилиты в %windir% либо еще куда-нито в %path% положить. А если я когда-нибудь реализую второй пункт TODO через getopts, то переписывание на NT command language станет невозможным в принципе

dexpl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.