Ваши записи в stdout буферизуются python и записываются только тогда, когда буфер заполнен. Есть два простых исправления:
Добавьте параметр -u
в команду python, чтобы запрашивать небуферизованный вывод ( 'python -u /script.py'
).
В качестве альтернативы, очищайте вывод после каждой записи. В вашем примере после строки sys.stdout.write ('Input:' + kbInput)
добавьте строку:
sys.stdout.flush ()
whereis
дает вам имя шаблона и местоположение, разделенные двоеточием, поэтому выполнение cd
или dirname
на whereis
результат не может работать:
$ whereis node_modules
node_modules: /usr/lib/node_modules
Правильный метод заключается в использовании самого npm
для получения префикса по умолчанию:
$ cd "$(npm get prefix)/lib/node_modules"
$ pwd
/usr/lib/node_modules
Вы можете сделать это с помощью,
cd "`which node_modules`"
С помощью dirname
, чтобы получить каталог:
cd "$(dirname "$(which node_modules)" )"
как вы упомянули в комментарии , я ожидаю сделать это за один шаг & предполагая, что nod_module
- это каталог, поэтому вы можете сделать это с помощью следующей команды:
cd $(whereis node_modules | cut -d ' ' -f2)
(Обратите внимание, что последняя команда предполагает, что используется Linux whereis
, а не BSD one, и путь не содержит пробелов.)
Как предлагает @Dani_I, вы можете взглянуть на это Почему бы не использовать "which"? Что тогда использовать? , что может быть более полезным.
Это, кажется, делает трюк:
cd "$(dirname "$(whereis node_modules)")"
Если, согласно вашему комментарию, вы хотите перейти в цель, если это каталог:
location=$(whereis node_modules)
if [[ -d "$location" ]]; then
cd "$location"
else
cd "$(dirname "$location" )"
fi
Вышеуказанное можно легко сделать функцией в вашем .bash_profile
.
Это работает для меня. Где есть опция -q (совершенно ), которая предназначена только для передачи результата в командную строку.
cd `whereis -q node_modules`