유닉스와 동등한 PowerShell?


21

복잡한 쉘 명령이 AWK로 텍스트 출력을 구문 분석 할 때 항상 어색하다는 것을 알았습니다 . 기본적으로 구조화 된 데이터를 텍스트로 변환 한 다음 텍스트를 다시 구문 분석하여 구조화 된 데이터로 돌아갑니다.

PowerShell 은 텍스트 대신 쉘 명령간에 유형이 지정된 개체를 파이프 할 수있게함으로써 이러한 문제를 방지하는 Windows 셸입니다.

PowerShell과 같이 텍스트 기반이 아닌 객체 기반의 유닉스 셸이 있습니까?

답변:


24

아니요, 다른 방법입니다. 숟가락 ^ H ^ H ^ H 구조화 된 데이터가 없습니다. 텍스트 만 있습니다.

유닉스 철학의 큰 부분은 텍스트를 출력하고 텍스트를 입력으로 받아들이는 아이디어를 기반으로합니다. 이에 대한 좋은 설명이있는 " The Unix Programming의 기술 "을 읽어 보는 것이 좋습니다.

오해하지 마십시오. 나는 당신의 요점을 이해하고 당신이 무엇을 얻으려고 노력하는지 알고 있습니다. 셸로 사용할 수있는 Ruby 및 Python의 대화식 인터프리터와 같은 것이 있지만 Bash만큼 기본 작업에는 적합하지 않습니다. 예를 들어 디렉토리를 시도하고 변경하십시오.

또한 쉘에서 객체를 사용하는 것이 전부는 아닙니다. 유일한 경우 이 지원, 유닉스에, 당신은 손실 될 것이다. grep, awk, sed 등과 같은 모든 표준 Unix 텍스트 조작 도구를 변경해야합니다.

몇 년 전에 이와 같은 것을 만들려고 시도했지만 이름을 기억할 수 없으며 오랫동안 들어 보지 못했습니다. 아마 이륙하지 않을 것입니다.


2
흥미롭게도, 텍스트 스트림 (또는 실제로는 바이트 스트림)을 데이터 객체 스트림으로 대체하면이 책에서 공식화 된 일반적인 원칙에 위배되지 않습니다. 심지어 "표현의 규칙"으로 더 잘 작동하는 것 같습니다. 유닉스가 텍스트 스트림을 프로그램 간의 인터페이스로 선택했다는 것입니다.
Wim Coenen

1
그러나 '데이터 객체'란 실제 파이썬 / 루비 / C ++ 객체 또는 C 구조체와 같은 것을 의미합니까?
wzzrd

3
+1 "스푼을 구부리지 마십시오. 불가능합니다. 대신 진실을 깨닫고 자합니다. 스푼이 없습니다." 인터페이스만큼 텍스트가 아니라 인터페이스 로서의 데이터 스트림입니다 . 객체는 프로그래밍하기는 좋지만 때때로 당신의 마음을 사로 잡기 위해 작은 감옥이됩니다.
Avery Payne

2
zsh> bash. 내 의견이지만 실제로 zsh를 시도하지 않았다면
xenoterracide

2
@WimCoenen, "구조화 된 데이터"를 중심으로 배송한다는 것은 모든 사람과 Tillie 이모가 "구조"가 무엇인지에 동의해야 함을 의미합니다. 같은 것 ls(1). 완전히 쓸모없는.
vonbrand


4

PowerShell과 비슷한 목표를 가진 프로젝트가 있습니다 : Hotwire . 일반 sh와 python 스크립팅 및 창 / 그래픽 환경을 결합합니다. 당신은 그것을 볼 수 있습니다.

기존 프로그램을 래핑하거나 Python 라이브러리를 사용하여 자체 객체로 확장 할 수있는 객체 지향 파이프 라인 을 기반으로 합니다 .


1
그게 이름을 기억하려고했던 프로젝트입니다! 트렁크에 마지막 커밋 : 2 년 전 ...
wzzrd

4

PowerShell은 2016 년에 오픈 소스가되었습니다. 그 이후로 점점 더 많은 플랫폼을 사용하고 있습니다. 소스 코드는 GitHub에서 사용할 수 있으며 많은 UNIX 계열 시스템 용 설치 패키지입니다.


1

나는 당신이 많은 해석 (또는 컴파일 된) 스크립트를 작성한 다음 인터프리터의 쉘 내에서 호출하여 객체를 반환하거나 보존하는 등의 방법으로 대부분을 달성 할 수 있다고 생각합니다.

적어도 Ruby, Perl, Python, Haskell (예 : GHCi), JavaScript (예 : node.js), Matlab 및 기타 언어로이 작업을 수행 할 수 있습니다.


파이프라는 객체는 게으른 평가 등을 수행 할 수 있다는 것을 의미합니다. 따라서 파이프에 파일 객체 세트를 전달하는 경우 이름이나 수정 된 날짜가 아니라 내용 일 수도 있습니다. JSON으로 어떤 데이터를 전달합니까? 답 : 다릅니다. 파이프 소비자가 데이터를 가져 오면 올바른 데이터를 요청할 수 있습니다. 문제 해결됨.
Nigel Thorne

1

3 년 후의 또 다른 생각 : XML 또는 JSON을 사용하여 텍스트 스트림이있는 객체를 표현할 수 있습니다. 저는 JSON (단순)을 선호하며 실제로 * NIX 유틸리티 JSON 지원을 제공하는 프로젝트가 있습니다. 예를 들면 다음과 같습니다. https://github.com/step-/JSON.awk

AWK와 같은 클래식 * NIX 프로그램에 객체 유형 모델을 사용할 때의 한 가지 문제는 실제로 OO 지원이 없다는 것입니다. 예를 들어 AWK에는 연관 배열이 있지만 배열은 다차원이 아닙니다 (AWK 배열의 각 요소는 숫자 또는 문자열이어야하며 배열은 AWK의 배열 객체가 될 수 없음).


Clojure는 JSON이 제한되어 있지만 모든 유형의 데이터를 직렬화 / 직렬화 해제 할 수있는 edn을 제공합니다.
마리오
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.