Сценарий оболочки использует аргументы от первого показа, когда выполнено во второй раз

Я действую в Shell Korn и пытаюсь запустить простой chdb скрипт, который я записал. Если выполнено без аргументов, это предлагает пользователю со списком баз данных и ожидает выбора. Если названо с единственным числовым аргументом, это автоматически сделает выбор для пользователя.

Пример:

> . chdb
Select the database sid from the following:
  1) testdb1
  2) testdb2
  3) testdb3

Selection: 2 <-- user entered

Environment is now set up for testdb2.
>. chdb 2
Environment is now set up for testdb2.
>

Моя проблема состоит в том, что, когда я запускаю скрипт с аргументом как выше и затем пытаюсь выполнить его снова без аргументов, он все еще использует старые аргументы.

Пример:

> . chdb 2
Environment is now set up for testdb2.
> . chdb
Environment is now set up for testdb2.
>

Править: Я использую точку, потому что я устанавливаю переменные в среде и не хочу вызывать дочерний экземпляр оболочки, иначе установка базы данных не будет работать. У меня есть чувство, что это может быть источником моей проблемы, но я не уверен, как работать вокруг этого.

Еще одна вещь, которую могло бы стоить упомянуть, состоит в том, что вызов моего сценария по крайней мере с 1 аргументом будет всегда работать, как предназначено. Это никогда не использует ранее вводимые аргументы, если это не вызывается без параметров.

1
задан dpatchery 30 June 2010 в 12:49
поделиться

3 ответа

Я придумал, как с этим справиться. Я добавил set - в конец моего скрипта, чтобы он отключил все аргументы.

Для всех, у кого есть такая же проблема, set - очищает все аргументы ($ 1, $ 2, $ 3 и т. Д.). Используйте shift , чтобы удалить только первый аргумент ($ 1), или shift num , чтобы отключить первый аргумент num . Отсюда следует, что shift $ # также очистит все аргументы.

0
ответ дан 2 September 2019 в 23:25
поделиться

Попробуйте: после input=$arg сделать unset arg, или привести if [["$#" -ne "1"]]

1
ответ дан 2 September 2019 в 23:25
поделиться

Кроме того, вы запускаете код 'sourced', что означает, что все переменные envrionment, объявленные в скрипте, все еще присутствуют при его повторном запуске.

Попробуйте

./chdb

вместо

. chdb

0
ответ дан 2 September 2019 в 23:25
поделиться
Другие вопросы по тегам:

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