если условие в bash получает слишком много аргументов

Hay más de una forma de hacerlo. (TM)

Solución 1 (probablemente la mejor ):agregue el comando para salir vmdal final de su script.

Solución 2 :redirigir la entrada estándar del comando vmda (o desde, según su mentalidad )el dispositivo nulo, así:

vmd -e script.tcl > out.txt < /dev/null &

De esa manera, cuando vmdhaya 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 vmdcon 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 -KILLtambién conocido como kill -9.

Solución 4 :Utilice screeno tmuxen lugar de disown. De esa manera, puede volver a conectarse al proceso vmden ejecución e ingresar más comandos como exit.

1
22.07.2019, 13:54
1 ответ

Вы получите «слишком много аргументов», если переменные содержат пробелы, что приведет к тому, что расширения без кавычек будут разбиты на несколько слов. Так что, действительно, вы должны заключать в кавычки все переменные в [.. ], чтобы предотвратить это.

Второй 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\ >
7
27.01.2020, 23:15

Теги

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