Можно ли настроить файл так, чтобы при обращении к нему (открытии для чтения) возвращалось не содержимое файла, а результаты выполнения сценария или исполняемого файла?
Я понимаю, что это можно сделать из командной строки с помощью stdout и каналов, но мне не всегда нужно ссылаться на скрипт из командной строки.
Вы не можете напрямую это. Что вы можете сделать, это (как вы говорите) использовать stdout и каналы. Не идеально и не особенно элегантно, поэтому вам, вероятно, следует переосмыслить свои требования и предлагаемое решение.
Предположим, файл, о котором идет речь, должен называться date
, и вы хотите, чтобы он выводил сообщение о текущей дате / времени:
# Create the "file" as a FIFO (a pipe)
mkfifo date
# Start the background process that always ensures there's data in the FIFO
( while :; do ( echo "The current date/time is $(date)" ) >date; done ) &
# Now read the "file" that's actually a pipe
date # Date/time now
cat date # Content from the "file" that's actually a pipe
date # Date/time now, again
# And a minute or so later, try that again, just to show the effect of a
# repeated read...
cat date