Я пытаюсь использовать $PATH в качестве входа для нахождения для нахождения файлов определенными моим путем. Это - моя попытка:
find ${PATH//:/ } -iname "*chrome*"
Здесь я заменяю все :
в PATH
с пространством, таким образом, список отправных точек похож, когда Вы вводите вручную. Проблема, это - ответ:
find: ‘/home/martin/bin /home/martin/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin’: No such file or directory
Переменная интерпретируется в целом строка вместо нескольких разделенных пробелом путей.
Эта конкретная проблема может быть решена с помощью xargs как это:
echo $PATH | xargs -d: -Ix find x -iname "*chrome*"
Мне все еще любопытно, как предпринять первую попытку работать. Я держал пари, что каждый лучше мудрый производительностью также. Я использую zsh в своей системе.Спасибо
Похоже на использование оболочки как zsh который отключает разделение слова на переменном расширении . Если Вы действительно используете zsh, то необходимо вызвать расширение или эмуляцией sh
(emulate sh
) или использованием ${=PATH//:/ }
:
$ printf "%s\n" ${PATH//:/ }
/usr/local/sbin /usr/local/bin /usr/bin
$ printf "%s\n" ${=PATH//:/ }
/usr/local/sbin
/usr/local/bin
/usr/bin
$ (emulate sh; printf "%s\n" ${PATH//:/ })
/usr/local/sbin
/usr/local/bin
/usr/bin
, Если Вы действительно используете удар, проверьте свою IFS:
$ (IFS=; printf "%s\n" ${PATH//:/ })
/usr/local/sbin /usr/local/bin /usr/bin
$ (IFS=; unset IFS; printf "%s\n" ${PATH//:/ })
/usr/local/sbin
/usr/local/bin
/usr/bin
Установка IFS
к пустой строке отключает разделение слова в ударе. Вы можете сбрасывать IFS
, чтобы получить значение по умолчанию и повторно включить разделение слова.