문제

저는 원격 파일 시스템의 디렉터리를 로컬 스크래치 디렉터리로 복사하고 압축을 풀어 사용자가 파일을 편집할 수 있도록 하는 간단한 Ruby 샌드박스 명령줄 유틸리티를 작성하고 있습니다.저는 Dir.mktmpdir을 기본 스크래치 디렉터리로 사용하고 있는데, 이는 매우 보기 흉한 경로를 제공합니다(예:/var/folders/zz/zzzivhrRnAmviuee+++1vE+++yo/-Tmp-/d20100311-70034-abz5zj)

사람들이 쉽게 액세스할 수 있도록 호출 셸을 새 스크래치 디렉터리로 복사하는 복사 및 압축 풀기 스크립트의 마지막 작업을 원하지만 호출 셸의 PWD를 변경하는 방법을 알 수 없습니다.한 가지 가능성은 유틸리티가 stdout에 대한 새 경로를 인쇄한 다음 서브셸의 일부로 스크립트를 실행하도록 하는 것입니다(예: cd $(sandbox my_dir) ), 하지만 최대 10분까지 걸릴 수 있으므로 복사 및 압축 해제 진행 상황을 인쇄하고 싶으므로 작동하지 않습니다.미리 결정되고 찾기 쉬운 스크래치 디렉터리로 이동해야 합니까?더 나은 제안이 있는 사람이 있나요?도움을 주셔서 미리 감사드립니다.-에릭

도움이 되었습니까?

해결책

당신은 당신의 스크래치 디렉토리에 앉아 있는 새로운 껍질로 죽을 수도 있지만, 나는 이 모든 것의 요점을 이해하는 데 어려움을 겪고 있습니다.귀하의 사용자가 이러한 파일을 편집하려는 경우 해당 파일을 유지하거나 수정된 ​​파일로 작업할 계획이라고 가정합니다.첫 번째 경우에는 파일을 적절한 위치에 저장하면 사용자가 해당 파일(현재 작업 디렉터리)을 찾는 것에 대해 걱정할 필요가 없습니다.두 번째 경우에는 스크래치 디렉토리에 있는 사용자를 위한 서브셸을 생성하고 파일을 편집하도록 지시합니다.서브쉘이 종료되면 동일한 Ruby 프로그램에서 파일을 계속 처리할 수 있습니다.

다른 팁

프로세스는 부모 프로세스의 환경을 변경할 수 없으므로 부모에게 약간의 조치를 취해야합니다.

사용자가 쉘 스크립트를 공급할 수 있으며 해당 스크립트는 Ruby 프로그램과 CD가 어딘가에 호출됩니다. 쉘의 소스 명령을 사용할 때 (. 또는 source), 그것은 현재 프로세스에 영향을 미칩니다.

Glenn Jackman은 아동 프로세스가 부모의 현재 작업 디렉토리 (또는 환경 변수 등)를 변경할 수 없습니다. 디버거로 학부모 프로세스를 위반 한 것을 계산하지 않는 한…

명령 대체의 일부로 실행되는 프로세스는 STDERR에 쓸 수 있도록 사용자에게 출력을 제공하는 동안 STDOUT 출력이 명령 대체에 의해 캡처 될 수 있습니다.

cd "$(sandbox whatever)"

어디에 모래 상자 명령은 대부분의 출력을 STDERR로 보냅니다. 최종 'Directory to Chdir to'to Stdout 만 보냅니다. 만약에 모래 상자 쉘 스크립트 였고 다음과 같이 할 수 있습니다.

#!/bin/sh
newdir="$(mktemp -dt sandobox)"
{
# do whatever, in a sub-shell
# use a group command (or change the braces to parens to use a sub-shell) to
# capture all stdout and send it to stderr 
} 1>&2
echo "$newdir"

루비에서 동등한 일을 할 수 있다고 확신합니다.

랩핑 쉘 스크립트에서 임시 디렉토리를 먼저 만들고 루비 스크립트에 명령 줄 인수로 전달하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top