Я действую в 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 аргументом будет всегда работать, как предназначено. Это никогда не использует ранее вводимые аргументы, если это не вызывается без параметров.
Я придумал, как с этим справиться. Я добавил set -
в конец моего скрипта, чтобы он отключил все аргументы.
Для всех, у кого есть такая же проблема, set -
очищает все аргументы ($ 1, $ 2, $ 3 и т. Д.). Используйте shift
, чтобы удалить только первый аргумент ($ 1), или shift num
, чтобы отключить первый аргумент num
. Отсюда следует, что shift $ #
также очистит все аргументы.
Попробуйте: после input=$arg
сделать unset arg
, или привести if [["$#" -ne "1"]]
Кроме того, вы запускаете код 'sourced', что означает, что все переменные envrionment, объявленные в скрипте, все еще присутствуют при его повторном запуске.
Попробуйте
./chdb
вместо
. chdb