Я должен повернуть ряд команд, переданных по каналу вместе в псевдоним в .bashrc

/./ необходимо всегда мочь выйти из строя к /.
// должно обычно быть разборным, НО я видел, настраивают проверку сценариев это так, я предполагаю, что могли быть системы, где это не то же. Проверьте его, но это будет, вероятно, прекрасно.
/../ будет только работать, если предыдущий каталог не будет символьной ссылкой (или, я верю, hardlink). С тех пор .. hardlink к его родительскому каталогу, он подойдет к тому ответвлению, не тому в текстовом пути, который Вы используете. (N.B. Ваша оболочка может быть установлена не разрешить символьные ссылки на cds, в этом случае это понизится в каталог, где символьная ссылка; это поведение, однако, почти полностью ограничено cd в оболочках с этим набором опции.)

Использовать readlink -f "$path", Я полагаю, что это разрешит все те случаи правильно.

1
29.06.2013, 02:43
3 ответа

Вопрос использования двойных кавычек и одинарных кавычек, где это имеет значение:

alias lsa="ls -l | awk '{print \$1}' "
3
27.01.2020, 23:12
  • 1
    ;-), большой, довольный, Вы сделали это –  GermanG 28.06.2013, 22:25

Что Вы делаете, неправильно использует псевдоним для чего-то, что это более сложно, чем давание более короткого имени к команде или передающих параметров к команде автоматически. Используйте функцию вместо этого, и Вы не должны будете волноваться о заключении в кавычки.

intip () {
    /sbin/ifconfig wlan0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
}

Обратите внимание, что Вам не нужен sudo здесь, ifconfig не нуждается в полномочиях, когда Вы только смотрите. Но на многих дистрибутивах необходимо обеспечить полный путь как ifconfig часто находится не в значении по умолчанию PATH для некорневых пользователей.

Между прочим, можно сделать фильтрацию полностью в awk, хотя не стесняются использовать несколько инструментов, если Вы более удобны тот путь. Вот один путь:

intip () {
    /sbin/ifconfig wlan0 | awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}

Можно легко сделать имя интерфейса дополнительный параметр функции.

intip () {
    /sbin/ifconfig "${1:-wlan0}" |
    awk 'sub(/^.*inet addr:/,"") {sub(/ .*/,""); print}'
}

Только для показа, почему псевдоним не работает: у Вас есть одинарные кавычки и для разграничивания псевдонима и в тексте псевдонима. Интерпретатор не может прочитать Ваши мысли и видеть, которые были предназначены, чтобы быть который. Посмотрите удар Вызова от sh (тире) с командами, считанными из args, и "Незавершенной заключенной в кавычки строки" / "неожиданный EOF" для некоторых случаев кавычек в кавычках и Почему эхо игнорирует мои символы кавычки? поскольку, как эффективно включать одинарную кавычку в единственно заключенную в кавычки строку путем ввода этих четырех символов '\''.

3
27.01.2020, 23:12

Или Вы могли установить moreutils (по крайней мере, если его доступное для Вашего дистрибутива) и использование ifdata.

$ ifdata -pa br0
172.16.1.244

Вы использовали бы wlan0 вместо br0, конечно.

2
27.01.2020, 23:12
  • 1
    Ничего себе, я понятия не имел, что это было в moreutils.Спасибо! Однако в наше время это кажется ifconfig удерживается от использования в большинстве систем в пользу более нового ip команда, но я не знаю намного больше об этом, чем это. –  jw013 29.06.2013, 01:00
  • 2
    @jw013 ip имеет многих, намного больше функций — требуемый в усовершенствованных сетях — чем ifconfig, который является, почему позже является устаревшим. Но ifdata на самом деле не использует ifconfig, по крайней мере, не для получения интерфейсного адреса. Его использование ioctl(SIOCGIFADDR, …) –  derobert 29.06.2013, 01:06

Теги

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