Существует больше чем один способ сделать это:
perl -nle 'print $1 if /\((.*)\)/' file
или:
awk 'NR > 1 {print $1}' RS='(' FS=')' file
Нет, это не так! (/home/usr/opt/android/platform-tools
не находится в PATH в среде sudo
). ${PATH}
вычисляется вашей оболочкой до запуска sudo
, таким образом заменяя значение PATH
до запуска sudo
, а не значение в пределах sudo
.
Вы правы, если подозреваете, что PATH
. Однако в связи с порядком оценки вы получите неверный ответ.
Вам нужно сделать sudo -E /home/usr/opt/android/platform-tools/adb
Как вы обнаружили, sudo
сбрасывает $ PATH
. Вы можете указать полный путь к утилите, которую хотите запустить, и в большинстве простых случаев это работает нормально. Но могут возникнуть ситуации, когда вам нужно сохранить $ PATH
, например, если программе нужно вызвать другие программы, не найденные в $ PATH
, которые предоставляет sudo
.
Самый простой способ сделать это:
sudo env PATH="$PATH" mycmd
Это использует порядок оценки оболочки. $ PATH
раскрывается перед запуском sudo
, поэтому фактически он становится:
sudo env PATH="/usr/local/sbin:/usr/local/bin:..." mycmd
sudo
, затем просто вызывает env
, который устанавливает $ PATH
в соответствии с инструкциями, а затем вызывает mycmd
.
Обратите внимание, что это работает, только если ваш доступ к sudo
не ограничен, и вы можете запускать любую команду (или любую команду env
в любом случае).