LINUX.ORG.RU

PowerShell открыт и доступен для Linux

 ,


8

7

Компания Microsoft анонсировала открытие исходного кода командной оболочки PowerShell под лицензией MIT и доступность под Linux. Доступны пакеты для Ubuntu и CentOS 7, а также инструкции по сборке.

>>> Подробности

★★★★★

Проверено: JB ()
Последнее исправление: cetjs2 (всего исправлений: 1)

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

Насколько я знаю, люди вполне его использует именно в качестве шелла.

Ну если тебе норм писать в пять строк то, что можно писать в одну на баше — ок. Как интерактивный шелл оно сосет, ибо:

https://stackoverflow.com/questions/18847145/loop-through-files-in-a-director...

А как скриптовый язык оно сосет уже у пайтона.

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

Ты не запускаешь там программы, ты по большей части запускаешь дотнет функции. Чем тебя пайтоновские функции не устроили, и почему ты не можешь перенаправить вывод одной функции на вфох другой в пайтон?

на пайтоне это скорее всего будет выглядеть не очень хорошо.

Приведи пример на поверщель, я тебе напишу на пайтон, и посмотрим.

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

Если они запилят стэндэлон шелл, я бы перешел с zsh. Если бы там еще фичи zsh были, вроде автокомплита, конечно.

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

В смысле REPL, которая при запуске import Turtle делает, чтобы можно было запускать типа /usr/bin/turtle? Ну сделай уж сам как-нибудь...

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

В ней все еще не работает ls, если объявить переменную ls?

Нет, конечно же. И не будет. А должен? А в баше работает ls, если объявить алиас ls?

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

Это еще пол беды. Вроде как раньше, если объявит переменную version, оно в выражении prog -version пыталось этот version вычитать, вот это фейл уже.

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

Вроде как раньше, если объявит переменную version, оно в выражении prog -version пыталось этот version вычитать

Видимо когда-то очень сильно раньше. Сейчас нет такого. Давно уже.

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

Ну если тебе норм писать в пять строк то, что можно писать в одну на баше — ок.

Если это быстрее писать и надёжней работает, то ок. Мне строчек не жалко.

Как интерактивный шелл оно сосет, ибо: https://stackoverflow.com/questions/18847145/loop-through-files-in-a-director...

Не понял сути претензий. Я не знаю PS но я понял, что этот код делает. На баше я бы написал точно так же, только оно работало бы хуже.

Ты не запускаешь там программы, ты по большей части запускаешь дотнет функции.

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

Приведи пример на поверщель, я тебе напишу на пайтон, и посмотрим.

Я PS не знаю. Ну давай для примера напиши то, что на SO по твоей ссылке в принятом ответе. По-моему довольно лаконичный код получился, хотя он действительно не использует каких-то внешних программ и сравнивать по нему так себе.

Legioner ★★★★★
() автор топика
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от Legioner

Я PS не знаю

На баше я бы написал точно так же, только оно работало бы хуже.

(*clapping*)

Принятом ответе

Обрати внимание: The BaseName part does not work (version 1) - but I managed by first creating a backup of the full file then making the change to the original file. For v1, you can use the following to extract the base name: [io.path]::GetFileNameWithoutExtension($name)

for file in list(iglob('*.py', recursive=True)):
    _f = open(file)
    nf = open(file + ".out",'w+')
    _f.writelines(list(filter(lambda x: not re.match("import.*",x) , _f.readlines())))
    nf.writelines(list(filter(lambda x: not re.match("import.*",x) , _f.readlines())))
anonymous
()

А толку от него под линаксом? дотнета-то нет.

oknechsak
()
Ответ на: комментарий от DonkeyHot

О! ? { $ _ } - мусор

так ps | grep, здесь «grep» - тоже мусор и его точно столько же (4 символа)

что «ps | grep» - ПС явные укурки писали.

Так еще раз, можешь писать просто ps pattern, или определить себе командлет grep и пиши дальше как в баше, с мусором.

Мешает ограниченный объём памяти в черепе. Команд и так слишком много.

Так это не баш, тебе ни команды ни структуру выхлопа в пс помнить не надо, их помнит автокомплит.

Алсо, не совсем понятно, если ты в баше помнишь что такое grep то в чем проблема помнить в пс?

anonymous
()
Ответ на: комментарий от DonkeyHot

Естественно, ты эту чушь мышкой натыкал. Мышь приемлема, когда тебе достаточно бода от твоего мозга.

А для пользователя его достаточно всегда. Не существует ни одной пользовательской задачи, которая решается через удобнее, чем мышкой. Так что шелл - это инструмент только администраторов.

anonymous
()
Ответ на: комментарий от Deleted

Мне powershell не нравится тем, что запускается секунд 10.

Что-то ты выдумываешь. Только что ise запустилась за полторы секунды (это полноценная иде, неудивительно). В консоли запускается практически мгновенно.

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

Первый раз запускается долго (как прогрев виртуальной машины выглядит). Второй раз - меньше секунды.

Deleted
()
Ответ на: комментарий от no-such-file

Никто не мешает пропихивать через stdin/stdout бинарные данные, в виде упакованных/сериализованных структур. Да хотя бы JSON.

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

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

А вот это уже совершенно ненужно, это уже терминальная стадия ооп головного мозга, таких надо лечить. Передавать надо структуры, списки, словари, а не код.

Код никто не передает, передаются структуры, списки и словари, для которых тебе иде подскажет возможные операции в виде методов.

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

Использовать помершель в качестве шелла невозможно из-за слишком громоздкого синтаксиса, а для написания скриптов чем она лучше пайтона?

Примеры громоздкого синтаксиса будут?

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

Это щель, код должен быть коротким и легко скейлиться.

И как f(x) более коротко и лучше скейлится, чем x.f(), кроме невозможности использования fluent api и отсутствия диспатча по типам?

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

Ну если тебе норм писать в пять строк то, что можно писать в одну на баше — ок.

в какие пять строк?

ls «*.log» | % {cat $_ | ? {$_ -match «patt»} | sc ($_.BaseName+"-out.log")}

какая там эквивалентная строчка на баше будет, кстати?

Чем тебя пайтоновские функции не устроили, и почему ты не можешь перенаправить вывод одной функции на вфох другой в пайтон?

То, что у пайтона херовая поддержка дуднета.

anonymous
()
Ответ на: комментарий от Legioner

beanshell как прототип поделки мелкомягкого существует уже 100500 лет.

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

ls «*.log» | % {cat $_ | ? {$_ -match «patt»} | sc ($_.BaseName+"-out.log")}

Можно и попроще:

sls patt *.txt | % {ac ($_.Path+'.out') $_.Line}

anonymous
()
Ответ на: комментарий от kirk_johnson

У python ещё более отвратительный синтаксис

Чем у Perl? Ололо.

Чего стоит пустой __init__.py в каждой второй директории.

В Python 3 больше не требуется.

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

Чем у Perl? Ололо.

:)

В Python 3 больше не требуется.

Ага. Но поскольку половина говнеца (типа ansible) все ещё написана на python2.7, это не особо спасает.

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

Скорее у бомбанет у адептов bash. А также не решает проблемы нескоординированности вывода в системе.

anonymous
()

Судя по комментам, в трэде выделилась группа с «башем головного мозга». Грустно, когда религиозная составляющая мешает шевелить зацементированными мозгами.

По новости: ПШ - вещь на порядок превосходящая bash, но вся ирония в том, что под виндой.... она накуль никому не нужна! Ибо всё делается визуально и редкий-редкий админ влезает в ПШ, чтобы сделать что-то неординарное.
Но ещё более ржачная ирония в том, что и в Линуксе, где «написание скриптов» админы впитывают с молоком матери, ПШ аналогично не нужен - Линукс уже имеет ТОННЫ языков, скриптов и перделок для автоматизации работы. И людей, которые умеют их писать и использовать вместе. Пусть костыльненько, пусть на атавистических пайпах, но это работает и предсказуемо надёжно. Кому надо гемороиться с дотнетом и его шелом, чтобы делать ту же самую работу??

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

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

Ибо всё делается визуально и редкий-редкий админ влезает в ПШ, чтобы сделать что-то неординарное.

На самом деле нет, но виндовые админы бодро жрут батники.

anonymous
()
Ответ на: комментарий от matumba

Я точно не сторонник bash - слишком уж костыльненький, узконаправленный и неуклюжий язык...

Мне как разработчику bash хочется тебе, мерзская мартышка, засунуть в зад кактус. Дабы не пиздел.

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

Это 5 строчек, склеенных в одну. Так можно любую программу в одну строчку склеить. Думаю, в PS ничего не мешает так же сделать.

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

хабр гадюшник еще тот! там даже гениальное могут заминусовать в пух и прах, а идиотизм прославить.

anonymous
()
Ответ на: комментарий от Sociopsih

хабр гадюшник еще тот! там даже гениальное могут заминусовать в пух и прах, а идиотизм прославить.

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

И чем это отличается от варианта на ПС, кроме кучи лишнего мусора и нечитабельного дерьма вроде ${f/%.log/_out.log}? Что, кстати, оно значит?

Кстати, а как в баше, например, получить от ps список все процессов, выбрать те, у которых приоритет больше 7, а потом посчитать средний WorkingSet среди 5 процессов с максимальным WorkingSet? Естественно, речь именно о баше - встроенными фичами ps пользоваться нельзя.

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

Bash:

for f in dir/*.log; do grep -q 'step[49]' -- "$f" && cp -- "$f" "${f/%.log/_out.log}"; done
for f in dir/*.log; do grep -q 'step[49]' -- "$f" || rm -- "$f"; done

Pwershell:

sls 'step[49]' *.log | % {ac ($_.Path+'.out') $_.Line}
nuff said

anonymous
()
Ответ на: комментарий от alozovskoy

Что следующее? ВиндовсМедиаПлеер? Осел? BSOD?

MSSQL в следующем году. Это без смеха и без открытия исходников. Я так полагаю, что и пропихивание powershell связанно именно с этим.

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

Это 5 строчек, склеенных в одну

Три.

Думаю, в PS ничего не мешает так же сделать.

И что из этого следует?

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

И чем это отличается от варианта на ПС

Всем?

, кроме кучи лишнего мусора и нечитабельного дерьма вроде ${f/%.log/_out.log}?

Дело привычки. Я вот вообще не знаю PS, и для меня то, что ты написал, выглядит абракадаброй. Там первый ответ заменяет .log в конце на _out.log, а ты почему-то скопировал не него. Если так, то просто "$f".out.

а как в баше

получить от ps

Естественно, речь именно о баше

встроенными фичами ps пользоваться нельзя.

Ну, я даже не знаю.

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

Всем?

Чем «всем», если это дословный перевод с точностью до обозначения ключевых слов?

Я вот вообще не знаю PS, и для меня то, что ты написал, выглядит абракадаброй.

Потому что там алиасы, которые принято использовать только в терминале. В обычных скрипте пишут:

Get-ChildItem *.txt | ForEach-Object {Get-Content $_ | Select-String 2 | Set-Content ($_.BaseName+'_out.log')}

Там первый ответ заменяет .log в конце на _out.log

Что кто куда скопировал?

Ну, я даже не знаю.

Чего не знаешь? Речь о дополнительных аргументах ps. То есть, представь себе, что ps умеет выдавать список с описанием всех процессов, и все на этом. Покажи теперь, как из этого списка получить указанный результат.

Просто если использовать костыли ps, то это будет функционал ps, а не баша.

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

И что из этого следует?

Из этого следует, что ты несешь чушь про «писать 5 строчек вместо одной»?

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

То же самое на PS можно написать так:

cat $in | sls 'step[4|9]' | sc $out
Просто нужно уметь пользоваться инструментом. Никто не мешает создавать алиасы (как для команд, так и для параметров, причем для параметров любое сокращение является алиасом по-умолчанию, если оно не двусмысленно) и для очень многих часто используемых команд и параметров уже заданы алиасы.

anonymous
()
Ответ на: комментарий от Zmicier

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

A-234 ★★★★★
()
Ответ на: комментарий от anonymous

Естественно, такие строчки легче писать, чем читать. Но иногда надо все сделать в одну строку. И это хорошо, что такая возможность есть.

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