Проверить дисковое пространство в Ubuntu

Это не является возможностью ни одной из распространенных оболочек.

Последние версии ATT ksh имеют уникальную особенность среди оболочек, называемую функциями дисциплины. Вы можете выполнить собственный код при доступе к переменной, и если вы установите .sh.value на другое значение, это значение будет использоваться вместо значения переменной.

function PATH.get { .sh.value=$PATH:/blabla/$RANDOM; }

Однако даже эта функция не поможет вам для PATH , поскольку она срабатывает только тогда, когда переменная используется сценарием, а не при внутреннем использовании PATH внутри оболочки.

Если вы хотите, чтобы это было для последнего элемента PATH, и вы используете bash или zsh, вы можете использовать их функцию «команда не найдена» для вызова пользовательского кода, если команда не найдена. В bash:

command_not_found_handle () {
  command "/blabla/$RANDOM/$@"
}

В zsh:

command_not_found_handler () {
  /blabla/$RANDOM/$1 "$@[2,$#]"
}

Кроме этих случаев, нет никакой функции оболочки, которая вам поможет.В любом случае никакая функция оболочки не поможет вам для программ, которые не запускаются оболочкой.

Вы можете использовать LD_PRELOAD , чтобы переопределить библиотечные функции execlp , execvp и execvpe , чтобы сделать что-то отличное от разделения ] PATH на части, разделенные двоеточиями, и интерпретировать каждый из них как каталог. См. Перенаправить дескриптор файла перед выполнением для примера LD_PRELOAD .

В качестве альтернативы вы можете поместить запись PATH в файловую систему FUSE , которая реализует стековую файловую систему, которая делает данный путь соответствующим переменной, лежащей в основе каталога. Это будет работать для программ, которые просто вызывают execve с каждым элементом PATH, пока один из них не сработает, но это запутает программы, которые сначала просматривают записи PATH в поисках существующих исполняемых файлов, а затем выполняют найденный.

0
03.01.2018, 13:43
0 ответов

Теги

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