Вывод которого управляют привыкший для входа к CD

Я не знаю, какую оболочку Вы используете, но возможности tr не встроенное. Это уверено не для меня в ударе или zsh :) Попытайтесь работать type tr лично убеждаться.

Во всей вероятности, sed правильный инструмент для задания. Это - то, для чего это было сделано.По обстоятельствам perl и awk также.

Если у Вас есть очень простые случаи и если Вы работаете со строковой переменной вместо конвейера, Вам могло бы сойти с рук реальное встроенное такое как использование поиска строки удара и замены на переменной.

string="Stuf with <tag> in it."
escaped=${string//</&lt;}
escaped=${escaped//>/&gt;}
echo $escaped
7
01.12.2011, 19:45
2 ответа

Использовать dirname:

cd "`dirname $(which program)`"
13
27.01.2020, 20:14
  • 1
    +1, но использование $() вместо обратных галочек: cd $(dirname $(which program)) –  glenn jackman 01.12.2011, 23:49
  • 2
    @glennjackman Это хорошо работает с одной парой обратных галочек (как показано в ответе, или наоборот с $ () на внешней стороне и обратных галочках на внутренней части). Это просто не работало бы с внутренней парой обратных галочек, вложенных в отдельной внешней паре обратных галочек. –  Eliah Kagan 02.12.2011, 05:53
  • 3
    @EliahKagan я думаю точка @glennjackman, не был то, что обратные галочки не работают, но что они должны постепенно постепенно сокращаться в пользу $() из-за многих преимуществ $() по обратным галочкам. –  jw013 26.12.2011, 19:57

В ударе я рекомендую type -p which. which внешняя команда, и это время от времени хитро. Можно использовать sed удалить все после финала /, или используйте специального назначения dirname утилита.

cd "$(dirname -- "$(type -p program)")"
cd "$(type -p program | sed 's:[^/]*$::')"

На командной строке, если Вы знаете, что каталог не содержит специальных символов (пробел или \[?*), можно опустить кавычки. Можно также использовать одинарные левые кавычки вместо одного из $(…) (вложенные одинарные левые кавычки являются трудными, не стоят того здесь).

cd `dirname $(type -p program)`
cd $(dirname `type -p program`)
cd `type -p program | sed 's:[^/]*$::'`

В zsh существует более компактный синтаксис.

cd ${$(whence -p program):h}
cd ${$(echo =program):h}
cd ${${_+=program}:h}

(Да, тот последний является загадочным. Это использует ${VAR+TEXT} синтаксис на _ переменная, со значением тем, чтобы быть =program который эквивалентен $(whence -p program).)

5
27.01.2020, 20:14

Теги

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