ssh: подписаться на nohup.out

Sí, el comportamiento es diferente. Toda la descripción no es tan simple.

Primero :¿cuándo es igual?

Esta línea de código:

$ var=1; printf "%s" "$var"; var=2 export var; echo " $var"

Imprimirá 1 2en todos los (no -csh como )shells excepto zsh.

jsh             : 1 2      # ATT version sh (heirloom).
ash             : 1 2
yash            : 1 2
dash            : 1 2
zsh/sh          : 1 2
bash            : 1 2
posixbash       : 1 2
lksh            : 1 2
mksh            : 1 2
ksh93           : 1 2
attsh           : 1 2
zsh             : 1 1

Eso me parece un error de zsh. ¿Cómo puede ser razonable que exportar una variable no retenga el valor exportado?

Pero eso se debe a que la variable exportada:vares la misma var que se imprime.

Exportando alguna otra var.

Si la línea se cambia a algo más similar a lo que está preguntando, con algún otro nombre de variable, como este:

$ var=1; printf "%s" "$var"; var=2 export othervar; echo " $var"

La ​​diferencia (s )se aclara:

jsh             : 1 2
dash            : 1 2
bash            : 1 1
posixbash       : 1 2
ksh93           : 1 2
zsh             : 1 1

Está claro que bash es diferente al viejo sh (Bourne ), el nuevo sh (dash ), ksh y otros (no enumerados aquí ).

Pero lo que es más importante es que bash actúa de manera diferente a bash --posix.

Requisito de Posix.

Algunas de las funciones integradas de shell (no todas )se denominan "integraciones especiales -integradas":

De:2.14. Construcción especial -En servicios públicos

The following "special built-in" utilities shall be supported in the shell command language. … however, the special built-in utilities described here differ from regular built-in utilities in two respects:

  1. An error in a special built-in utility may cause a shell executing that utility to abort, while an error in a regular built-in utility shall not cause a shell executing that utility to abort. …

  2. As described in Simple Commands, variable assignments preceding the invocation of a special built-in utility remain in effect after the built-in completes; this shall not be the case with a regular built-in or other utility.

Entonces, en un comando simple:var=2 specialBuiltinla variable vardebe conservar su valor después de que specialBuiltin haya salido. Pero no todas las implementaciones de shell siguen esa regla.

Entonces, esto debería imprimir1 hello 2(ya que evales un incorporado especial):

var=1; printf '%s ' "$var"; var=2 eval printf %s hello; echo " $var"

Lo hace en shy bash --posixpero no en simple bash.

Lista de construcciones especiales.

De hecho, la lista POSIX de funciones integradas especiales está aquí , siendo la lista:

02 break
03 :
04.
05 continue
06 eval
07 exec
08 exit
09 export
10 readonly
11 return
12 set
13 shift
14 times
15 trap
16 unset

El número en la primera columna es el valor de var utilizado para cada prueba.

Podríamos probar todos los componentes especiales (excepto exit, exec y times )con este código:

var=01;
while : ; do var=02 break; done;    printf ' %s' "02-$var"; var=01
var=03 : ;      printf ' %s' "03-$var"; var=01
echo 'printf " %s" "04-<$var>"' >source-sh
var=04. source-sh; printf ' %s' "04-$var"; var=01
c=0; while ((c++<1)); do
     var=05 continue
     done; printf ' %s' "05-$var"; var=01
var=06 eval 'printf " %s" "06-<$var>"'; printf ' %s' "06-$var"; var=01
#( var=07 exec bash -c  'printf " %s" "07-$var"'); var=01
#( var=08 exit;     printf ' %s' "08-$var" ); var=01 
var=09 export var;  printf ' %s' "09-$var"; var=01
var=10 readonly i;  printf ' %s' "10-$var"; var=01
varfun(){ var=11 return; }; varfun; printf ' %s' "11-$var"; var=01
var=12 set -- aa ;  printf ' %s' "12-$var"; var=01
var=13 shift;       printf ' %s' "13-$var"; var=01
var=15 trap;        printf ' %s' "14-$var"; var=01
var=16 unset j;     printf ' %s' "15-$var"; var=01
echo

Para imprimir esta lista:

jsh             :  02-02 03-03 04-<04> 04-04 05-05 06-<06> 06-06 09-09 10-10 11-11 12-12 13-13 15-15 16-16
dash            :  02-02 03-03 04-<04> 04-04 05-05 06-<06> 06-06 09-09 10-10 11-11 12-12 13-13 15-15 16-16
bash            :  02-01 03-01 04-<04> 04-01 05-01 06-<06> 06-01 09-09 10-01 11-01 12-01 13-01 15-01 16-01
posixbash       :  02-02 03-03 04-<04> 04-04 05-05 06-<06> 06-06 09-09 10-10 11-11 12-12 13-13 15-15 16-16
ksh93           :  02-02 03-03 04-<04> 04-04 05-05 06-<06> 06-06 09-09 10-10 11-11 12-12 13-13 15-15 16-16
zsh             :  02-01 03-01 04-<04> 04-01 05-01 06-<06> 06-01 09-01 10-01 11-01 12-01 13-01 15-01 16-01

Como puede ver, donde posix solicita que var retenga 02, la mayoría de los shells lo retienen e imprimen 02-02, pero no en bash (ni zsh )ya que imprimen 02-01. Solo en exportestá la impresión bash 09-09y la impresión zsh 09-01.

1
18.07.2019, 22:01
1 ответ

Вы можете запустить tail -fна nohup.out, как указано в комментариях. Но для длительной задачи вам может быть лучше запустить ее под экраном GNU(или tmux ). Он выделяет виртуальный терминал, где может выполняться команда, позволяя вам отключаться и снова подключаться к «сеансу» по желанию.

Внутри экрана вы можете просто запустить свою команду, и последний вывод будет виден на терминале, или, например,. запустите mycmd > outputfile, чтобы сохранить вывод в файл, или даже mycmd | tee outputfile, чтобы получить вывод как на терминал, так и в файл. А экран даже позволяет открывать несколько окон, поэтому вы можете легко просматривать выходной файл во время выполнения команды.

1
27.01.2020, 23:41

Теги

Похожие вопросы