Псевдоним от .bash_profile не отражается через систему

Это должно сработать:

awk -F- '$1!=a{printf "%s", $1} {printf "-%s&", $2} {a=$1}' file | sed 's/&$/\n/g'

Outout:

4480-1&-2&-3&-15&4581-1&-2&-3&-4

Explantion:

  • awk -F- delimiter is -
  • $1! =a{printf "%s", $1} выведите первую часть 4480, если она не совпадает с последней обработанной строкой
  • {printf "-%s&", $2} выведите вторую часть с & в конце
  • {a=$1} установите a в обработанную строку
  • sed 's/&$/\n/g' уберите последний символ, который является & и добавьте новую строку
-. 121---111914-

Можно использовать переменную окружения IGNOREEOF в режиме bash. Так что экспорт IGNOREEOF=42 и вам нужно будет нажать Ctrl+D сорок два раза, прежде чем он фактически выйдет из вашей оболочки.

В наборе также есть -о игнорировании.

.
1
15.06.2014, 01:50
2 ответа

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

.
0
27.01.2020, 23:28

Вас смущают несколько вещей:

  1. , которые не отражают псевдонимы. Поэтому, когда вы пытаетесь проверить, был ли создан псевдоним, используя , который вам не поможет. Вместо этого запустите псевдоним без аргументов; он покажет все действующие псевдонимы. Пример:

    anthony@Zia:~$ foo
    команда не найдена
    anthony@Zia:~ [$?=127]$ псевдоним foo="echo hi
    anthony@Zia:~$ foo
    привет
    Энтони@Зия:~$ что за фууууууууууууууууууууу...
    anthony@Zia:~ [$?=1]$
    
  2. Псевдонимы влияют на панцирь, а не на другие вещи. Когда делают , затмение и т.д. пытаются запустить gcc , псевдонимы псевдонимов псевдонимов не будут иметь значения. Вы также можете экспортировать только переменные, а не псевдонимы. Вот пример (опять же с этим псевдонимом foo) perl, пытающегося его запустить:

    anthony@Zia:~$ perl -Mautodie=system -E 'system("foo")'.
    "Фу" не началось: "Нет такого файла или директории" в строке 12 (eval 6).
    в строке -e 1
    
  3. Большинство компилирующих объектов работают cc, c++ и т.д., а не gcc. Так что даже если бы вы переопределили gcc, это, скорее всего, не сработало бы.

Итак, как это сделать?

Лучший подход - сказать make и т.д., какой компилятор использовать:

make CC=/path/to/myrtgcc target

Вы также можете передать это в окружении при выполнении /.configure для программ, которые используют autoconf.

Второй подход заключается в создании простых shell скриптов с именами gcc, cc и т.д. в (например) ~/bin и поместить их первыми в свой путь. Скрипты выглядели бы примерно так:

#!/bin/sh
exec /path/to/myrtgcc "$@"

и вы бы поместили их первыми в PATH, используя что-то подобное в вашем .bashrc:

PATH="$HOME/bin:$PATH"
export PATH
3
27.01.2020, 23:28

Теги

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