Передать вывод команды whereis команде cd, чтобы сменить каталог за один шаг

Ваши записи в stdout буферизуются python и записываются только тогда, когда буфер заполнен. Есть два простых исправления:

  1. Добавьте параметр -u в команду python, чтобы запрашивать небуферизованный вывод ( 'python -u /script.py').

  2. В качестве альтернативы, очищайте вывод после каждой записи. В вашем примере после строки sys.stdout.write ('Input:' + kbInput) добавьте строку:

     sys.stdout.flush () 
     
2
17.01.2019, 00:17
4 ответа

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
4
27.01.2020, 21:49

Вы можете сделать это с помощью,

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"? Что тогда использовать? , что может быть более полезным.

5
27.01.2020, 21:49

Это, кажется, делает трюк:

cd "$(dirname "$(whereis node_modules)")"

Если, согласно вашему комментарию, вы хотите перейти в цель, если это каталог:

location=$(whereis node_modules)
if [[ -d "$location" ]]; then
    cd "$location"
else
    cd "$(dirname "$location" )"
fi

Вышеуказанное можно легко сделать функцией в вашем .bash_profile.

6
27.01.2020, 21:49

Это работает для меня. Где есть опция -q (совершенно ), которая предназначена только для передачи результата в командную строку.

cd `whereis -q node_modules`
0
20.04.2021, 12:36

Теги

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