Я получаю 2
из вашего кода. Тем не менее, вы можете использовать ту же самую технику для любой переменной или числа:
local start=1
(( start++ ))
или
(( ++start ))
или
(( start += 1 ))
или
(( start = start + 1 ))
или
local start=1
echo $(( start + 1 ))
и др.
Haría un guión para algo que hago a menudo.
cat > foo
#! /bin/bash
echo "\$ $1" > "$2"
$1 >> "$2"
^D
chmod +x foo
y luego ejecute
./foo "java -cp src/ nlp.lm.BigramModel atis/ 0.1" "trace/bigram-trace.txt"
Puedes hacer algo como esto:
echo date | script -q bigram-trace.txt
Resultado:
$ cat bigram-trace.txt
date
sh-4.4$ date
Sun, Feb 18, 2018 6:22:13 PM
sh-4.4$ exit
O sin tubo:
script -q bigram-trace.txt <<'eof'
date
eof
Un método que es simple y conveniente, especialmente si desea guardar no solo un comando sino varios, es ejecutar primero el comando script
y luego ejecutar sus comandos. script
guarda tanto la entrada como la salida de cada comando. Cuando haya terminado, escriba exit
o ctrl -D para salir script
.
Por ejemplo, para registrar tanto la entrada como la salida de dos comandos:
$ 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
Para ver la información guardada, cat
el archivotypescript
:
$ 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
tiene muchas opciones. Ver man script
para más detalles.
( 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)
Знак «плюс»+␣
(и пробел )перед командой — это подсказка трассировки или четверичная подсказка, которую можно изменить, установив 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
или аналогичные утилиты, могут лучше подойти, поскольку трассировка оболочки составных команд не отображается, поскольку кто-то мог их ввести. Кроме того, переменные и т. д. будут расширены в выводе трассировки.