Большинство дистрибутивов теперь включает псевдодиск для этой точной цели. Можно записать файлы в него как нормальный, это обычно называют /dev/shm
. Можно проверить, есть ли у Вас он как так:
$ mount |grep shm
tmpfs on /dev/shm type tmpfs (rw)
Если у Вас есть он, можно записать в него точно так же, как любая другая файловая система:
$ echo "hello world" > /dev/shm/somefile.txt
И посмотрите, что он использует нормальные инструменты:
$ ls -l /dev/shm/
total 680
-r-------- 1 saml saml 67108904 Jul 22 20:55 pulse-shm-3981461026
-r-------- 1 saml saml 67108904 Jul 18 18:06 pulse-shm-799251885
-rw-rw-r-- 1 saml saml 12 Jul 24 10:59 somefile.txt
Однако это не использует фактического дискового пространства, это использует RAM.
stty и более старые версии who am i будут выдавать сообщения об ошибках, если они не подключены к tty-устройству. stty
проверяет stdin (fd 0); Я не знаю, какой дескриптор файла проверяет
. Чтобы избежать появления этих сообщений об ошибках, обычным обходным путем было использование параметра -t
в test (более известном как [
), чтобы проверить, работает ли оболочка подключен к tty.
if [ -t 0 ]
then
ID=`who am i | awk '{print $1}'`
else
ID="unknown"
fi
В вашем случае вы можете заключить всю логику, которая устанавливает переменную PS1, в этот оператор if
, поскольку PS1 имеет смысл только при работе на tty.
Ниже приводится соответствующий раздел из объяснения теста
по ссылке выше.
-t file_descriptor
Истинно, если номер дескриптора файла file_descriptor открыт и связан с терминалом. False, если file_descriptor не является допустимым номером дескриптора файла, или если номер файлового дескриптора file_descriptor не открыт, или если он открыт, но не связан с терминалом.
Ваш скрипт, в первый раз использующий who
, а не whoami
. Измените его, и вы получите ожидаемый результат.