Hay más de una forma de hacerlo. (TM)
Solución 1 (probablemente la mejor ):agregue el comando para salir vmd
al final de su script.
Solución 2 :redirigir la entrada estándar del comando vmd
a (o desde, según su mentalidad )el dispositivo nulo, así:
vmd -e script.tcl > out.txt < /dev/null &
De esa manera, cuando vmd
haya terminado con su secuencia de comandos e intente leer el siguiente comando desde la entrada estándar, recibirá "fin de archivo" y saldrá.
Solución 3 :Elimine el proceso sobrante vmd
con kill
. Necesitará su PID para lo que puede anotar cuando el shell lo imprime después de iniciarlo con &
, o encontrarlo a través del comando ps ax
. Pruebekill -TERM
(el )predeterminado primero, si eso no funciona, use kill -HUP
. ¿no use kill -KILL
también conocido como kill -9
.
Solución 4 :Utilice screen
o tmux
en lugar de disown
. De esa manera, puede volver a conectarse al proceso vmd
en ejecución e ingresar más comandos como exit
.
Вы получите «слишком много аргументов», если переменные содержат пробелы, что приведет к тому, что расширения без кавычек будут разбиты на несколько слов. Так что, действительно, вы должны заключать в кавычки все переменные в [.. ]
, чтобы предотвратить это.
Второй if
, который вы написали (if [ "$inputstring" = "$INPUT" ]
), верен и будет запускать основную ветвь if
, если две переменные действительно содержат одни и те же данные. Но в зависимости от того, откуда они берутся, у вас могут быть лишние пробелы внутри них или что-то еще, что трудно увидеть. Используйте, например. printf "<%q>\n" "$INPUT"
, чтобы увидеть содержимое переменной в однозначном формате. (Выходной формат зависит от значения переменной, но обычно оно печатается в кавычках и/или показывает специальные символы с обратной косой чертой -.)
Например, здесь переменные не содержат одни и те же данные, последние имеют пробел в конце:
$ foo=123
$ bar="123 "
$ echo $foo $bar
123 123
$ if [ "$foo" = "$bar" ]; then echo same; else echo not same; fi
not same
$ printf "<%q>\n" "$foo" "$bar"
<123>
<123\ >