java -cp src/ nlp.lm.BigramModel wsj/ 0.1
명령이 있고 명령 자체와 명령 실행 출력을 모두 파일에 저장하고 싶다고 가정해 보겠습니다 .
이를 수행하는 한 가지 방법은 다음과 같습니다.
echo "$ java -cp src/ nlp.lm.BigramModel atis/ 0.1" > trace/bigram-trace.txt
java -cp src/ nlp.lm.BigramModel atis/ 0.1 >> trace/bigram-trace.txt
더 좋은 방법이 있나요?
답변1
( exec >logfile 2>&1; set -x; somecommand )
그렇지 않으면
( set -x; somecommand ) >logfile 2>&1
그러면 하위 쉘에서 추적이 활성화 (...)
되고 모든 출력이 파일로 리디렉션됩니다 logfile
.
그렇다면 파일은 다음과 같이 보일 수 있습니다 somecommand
.mount
logfile
+ mount
/dev/sd0a on / type ffs (local)
/dev/sd0d on /tmp type ffs (local, nodev, nosuid, softdep)
/dev/sd0e on /var type ffs (local, nodev, nosuid)
/dev/sd0f on /usr type ffs (local, nodev)
/dev/sd0g on /usr/local type ffs (local, nodev, wxallowed)
/dev/sd0h on /home type ffs (local, nodev, nosuid, wxallowed, softdep)
/dev/sd0j on /backup type ffs (local, nodev, nosuid)
/dev/sd0k on /extra type ffs (local, nodev, nosuid, wxallowed, softdep)
mfs:92196 on /tmp_mfs type mfs (asynchronous, local, nodev, nosuid, wxallowed, size=8388608 512-blocks)
명령 +␣
(더하기 기호 및 공백) 앞에 오는 것은 추적 프롬프트 또는 4차 프롬프트이며 PS4
프롬프트 문자열을 설정하여 변경할 수 있습니다.
( PS4='$ '; set -x; df /tmp ) >logfile 2>&1
위와 비슷한 결과가 나올 수 있습니다
$ df /tmp
Filesystem 512-blocks Used Avail Capacity Mounted on
/dev/sd0d 10315164 160 9799248 0% /tmp
존재하다 logfile
.
이는 아마도 필요한 간단한 명령에 적합합니다. 복합 명령의 경우 script
사람들이 입력할 때처럼 복합 명령에 대한 셸 추적이 표시되지 않기 때문에 유사한 유틸리티를 사용하는 다른 답변이 더 적절할 수 있습니다. 변수 등도 추적 출력에서 확장됩니다.
답변2
다음을 수행할 수 있습니다.
echo date | script -q bigram-trace.txt
결과:
$ cat bigram-trace.txt
date
sh-4.4$ date
Sun, Feb 18, 2018 6:22:13 PM
sh-4.4$ exit
또는 파이프 없이:
script -q bigram-trace.txt <<'eof'
date
eof
답변3
특히 하나의 명령이 아니라 여러 명령을 저장하려는 경우 간단하고 편리한 방법은 해당 명령을 먼저 실행 script
한 다음 명령을 실행하는 것입니다. script
각 명령의 입력과 출력을 저장합니다. 완료되면 입력 exit
하거나 Ctrl-D를 눌러 종료합니다 script
.
예를 들어 두 명령의 입력과 출력을 기록하려면 다음을 수행합니다.
$ script
Script started, file is typescript
$ date
Sun Feb 18 16:59:45 PST 2018
$ for i in {1..3}; do echo $((i**2)); done
1
4
9
$ exit
Script done, file is typescript
저장된 정보를 보려면 cat
다음을 파일로 저장하세요 typescript
.
$ cat typescript
Script started on Sun 18 Feb 2018 04:59:37 PM PST
$ date
Sun Feb 18 16:59:45 PST 2018
$ for i in {1..3}; do echo $((i**2)); done
1
4
9
$ exit
Script done on Sun 18 Feb 2018 05:00:13 PM PST
script
많은 옵션이 있습니다. man script
자세히보다.
답변4
나는 정기적으로 하는 일에 대한 대본을 만듭니다.
cat > foo
#! /bin/bash
echo "\$ $1" > "$2"
$1 >> "$2"
^D
chmod +x foo
그런 다음 실행
./foo "java -cp src/ nlp.lm.BigramModel atis/ 0.1" "trace/bigram-trace.txt"