В продолжение комментария Стефана Шазеласа к ответу Кусалананды:
$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv TABLE2.csv
Используйте массив для хранения файлов. Начните с выражения glob, которое соответствует некоторым файлам:
$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)
Теперь «голый» глобус, который не соответствует, чтобы продемонстрировать, что несоответствующий глобус -заменяется шаблоном глобуса в виде строки:
$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')
Теперь с префиксом "null glob"
$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$
См. раздел «Генерация имени файла» на справочной странице ksh.
Чтобы ответить конкретно на ваш вопрос:
typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
Вы должны избавиться от привычки использовать имена переменных ALLCAPS.
См. также:https://mywiki.wooledge.org/ParsingLs
Ваш файл ~/.profile
читается оболочкой bash
, если ~/.bash_profile
не существует и оболочка является оболочкой входа в систему. Интерактивные оболочки без входа -bash
читают ~/.bashrc
при запуске.
Обычно используется~/.bash_profile
(или~/.profile
)источник ~/.bashrc
, особенно в системах, где bash
— единственная активно используемая оболочка (, имеющая ~/.profile
, которая читается некоторыми не-bash
оболочки тоже, прочитайте ~/.bashrc
может вызвать проблемы, если активно используется много разных оболочек ).
Чтобы избежать использования какого-либо из этих файлов в уже работающем bash
сеансе, просто добавьте элемент к значению переменной PATH
, вы можете запустить присваивание непосредственно в командной строке оболочки:
PATH=$HOME/.npm-global/bin:$PATH
(Обратите внимание, что использование export
является излишним как здесь, так и при добавлении его в файл запуска, поскольку переменная PATH
уже является переменной среды, если вы явно не использовали для нее unset
.)
Не существует другого способа изменить значение переменной PATH
в уже активном сеансе оболочки, кроме получения файла инициализации оболочки, который вы только что изменили (, чего вы хотели избежать, что понятно, поскольку это может также делать всевозможные другие вещи ).
Перезапуск оболочки (без перезагрузки )также должен работать, особенно если вы запускаете свои оболочки как оболочки входа в систему (эмулятор терминала может запускать оболочки как оболочки входа, если они не являются оболочками входа по умолчанию, как в macOS ).
Я думаю, вы можете поместить его внутрь PS1, чтобы в любое время, когда появится оболочка, вы могли получить.bashrc или делать все, что хотите.
Нужна интеллектуальная проверка, может быть, добавить строку в.bashrc, которая помещает временную метку.bashrc в переменную? затем вы можете проверить с помощью команды PS1 -, был ли файл обновлен.
Вторая часть может быть сложнее, если вы всегда добавляете больше к переменной PATH, она будет бесконечно увеличиваться с каждым обновлением. либо установите фиксированное значение в начале.bashrc, либо каким-либо образом отфильтруйте дубликаты в конце после добавления всех компонентов.
Нет времени думать об этом больше, но было бы здорово посмотреть, работает ли это.:-)