Windows, Linux에서 쉘스크립트에 익숙하지 않지만 쉘 명령어를 사용해야 하는 경우 닷넷코어만 설치 되어 있다면 Chell 라이브러리를 사용하면 쉘스크립트와 유사하게 스크립팅 할 수 있다.

비슷한 것으로 아래 라이브러리도 있다.

C#을 google/zx 처럼 쉘 스크립트 쓰기

깃허브 저장소: https://github.com/mayuki/Chell

아래는 깃 명령어를 실행하는 코드이다.

var branch = await Run($"git branch --show-current");
await Run($"git archive {branch} -o {branch}.zip");

아래처럼 프로젝트를 만든 후 실행을 dotnet run으로 실행하면 .cs 파일은 언제라도 수정하면 된다. 단 닷넷코어가 설치 되어 있어야 한다.

https://github.com/mayuki/Chell/blob/main/samples/GettingStarted.Basic.Windows/Program.cs

만약 dotnet 명령어가 아닌 CShell 명령어로 실행하고 싶다면 아래처럼 한다.

% dotnet tool install -g Chell.Run

% chell -e "Echo(DateTime.Now)"

9/1/2021 0:00:00 PM

% cat <<__EOF__ > MyScript.cs

var dirs = new [] { "foo bar", "baz" };

await Run($"mkdir {dirs}");

await Run($"ls -l");

__EOF__

% chell MyScript.cs

$ mkdir "foo bar" "baz"

$ ls -l

total 8

drwxr-xr-x 2 mayuki mayuki 4096 Sep  1 00:00  baz/

drwxr-xr-x 2 mayuki mayuki 4096 Sep  1 00:00 'foo bar'/

우리가 만드는 프로그램에서 CShell 라이브러리를  사용하면 외부 프로그램 실행을 쉽게 할 수 있다. 예를들어 서버 프로그램 배포 툴을 만들 때 git이나 svn 명령어를 실행해야 할 때 닷넷라이브러리의 Process 클래스를 사용하는 것 보다 CShell을 사용하는 것이 실제 명령어를 사용할 때와 비슷하게 사용할 수 있어서 더 좋다.

샘플 프로젝트를 보면 Windows, Linux에서 실행할 수 있는 예제코드가 있다.

https://github.com/mayuki/Chell/tree/main/samples

README.md 파일에 사용법이나 기능에 대한 예제코드가 여러개 있어서 보면 사용 방법은 쉽게 알 수 있다.

똑 CShell로 만든 코드가 잘 동작하는지 쉽게 확인하는 방법은 LinqPad와 같이 사용하면 더 좋다.