Как изменить.profile так, чтобы настройка действовала без необходимости каждый раз искать.profile или перезагружаться?

В продолжение комментария Стефана Шазеласа к ответу Кусалананды:

$ 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

0
28.03.2021, 06:26
2 ответа

Ваш файл ~/.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 ).

2
28.04.2021, 22:55

Я думаю, вы можете поместить его внутрь PS1, чтобы в любое время, когда появится оболочка, вы могли получить.bashrc или делать все, что хотите.

Нужна интеллектуальная проверка, может быть, добавить строку в.bashrc, которая помещает временную метку.bashrc в переменную? затем вы можете проверить с помощью команды PS1 -, был ли файл обновлен.

Вторая часть может быть сложнее, если вы всегда добавляете больше к переменной PATH, она будет бесконечно увеличиваться с каждым обновлением. либо установите фиксированное значение в начале.bashrc, либо каким-либо образом отфильтруйте дубликаты в конце после добавления всех компонентов.

Нет времени думать об этом больше, но было бы здорово посмотреть, работает ли это.:-)

0
28.04.2021, 22:55

Теги

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