openlang

Pluto 안에서 OS 명령 실행하기

Pluto 안에서 외부 운영체제 명령을 호출해 fossil add fernuser/tiddlers/* 작업을 자동화하고, 마지막 커밋만 콘솔에서 수동으로 하는 방법이 있을까요?

영어에서 번역원문 보기

이어지는 대화 3

서로의 근거를 따라
  1. 고유 링크

    안녕하세요! 네, Julia는 셸[1] (#footnote-731542-1) 명령을 실행할 수 있고 Pluto 노트북도 마찬가지입니다. 예를 들어 다음 코드를 넣은 셀은 Unix 계열 시스템의 디렉터리 목록 명령 ls를 실행합니다:

    run(`ls`)

    명령을 나타내는 Cmd 타입의 객체를 만든 다음 run으로 실행합니다. run과 Cmd 문서에는 이런 식으로 명령을 실행하는 방법에 대한 자세한 설명이 더 있습니다.

    Pluto 노트북을 열면 모든 셀이 실행되고, 셀을 바꾸면 거기에 의존하는 셀도 다시 실행된다는 점에 유의하세요. 외부 셸 명령에서 이 동작이 바람직한지는 상황에 따라 다르지만, 의존성이 바뀔 때마다 그 “명령 셀”을 실행하지 않도록 할 수도 있습니다.

    추신: run은 프로세스의 결과를 반환하므로 보통 출력이 보이거나, 명령이 실패하면 오류 코드가 보입니다.

    실제로는 셸을 통해 실행하는 게 아니며, 아래 답글에서 설명했습니다. ↩︎ (#footnote-ref-731542-1)

    영어에서 번역원문 보기
  2. 고유 링크

    천만에요. 빠뜨린 점이 하나 생각났는데, Julia에서 명령 객체를 만들 때 특수 문자 (예제에 있는 * 같은 것)가 포함되면 특히 조심해야 합니다. Julia는 셸을 호출하지 않고 명령을 직접 실행합니다. 따라서 *가 기대하는 대로 동작하지 않을 가능성이 큽니다.

    예를 들어 이렇게 실행한다고 합시다

    command = `fossil add fernuser/tiddlers/*`
    run(command)

    Julia는 먼저 따옴표 없는 *에 대해 불평합니다 (\*라고 써야 합니다). 하지만 고쳐도 원하는 결과는 안 나옵니다. *를 디렉터리의 파일 이름에 대응시키는 “글로빙”은 Bash 같은 셸이 제공하기 때문입니다. run은 그 작업을 하지 않습니다. 예를 들어 명령 인용에 대한 토론 (https://discourse.julialang.org/t/quoting-in-shell-commands/6781)과 디렉터리 재귀 삭제 같은 관련 토론 (https://discourse.julialang.org/t/removing-directory-contents-recursively/128761)을 보세요.

    아마 가장 간단한 해결 방법은 명령을 명시적으로 셸을 통해 실행하는 겁니다. 예를 들면 bash -c '...'으로요

    command = `bash -c 'fossil add fernuser/tiddlers/*'`
    run(command)

    그러면 사용하는 셸 (Bash라고 가정)의 기대한 동작을 얻을 수 있습니다. 시스템에 Bash가 있어야 한다는 단점은 있지만, 필요하면 쉽게 바꿀 수 있습니다.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. Google Colab에서 MATLAB 사용하기

    Google Colab(클라우드의 Jupyter)에서 MATLAB 명령을 쓸 수 있나요? 예를 들어 Google Colab에서 bin(vbt, Name, Value), tbfi(vbt, Name, Value), tuff(vb…

    답글 2최근 활동 matlab
  2. gdb에서 주소로 어셈블리 명령에 중단점을 설정할 수 있나요?

    제가 시도한 명령: 그런데 이 명령은 없는 모양이에요. gdb에서 이런 걸 할 수 있나요?

    답글 2최근 활동 assembly
  3. Playwright 단언에서 두 텍스트 값 중 하나를 허용할 수 있나요?

    텍스트에 one 또는 two 중 하나가 들어 있는지 확인하고 싶어요: Playwright에서 이렇게 동작하게 할 수 있나요? 같은 걸 문장 안에도 넣을 수 있을까요, 예를 들면

    답글 2최근 활동 typescript