Ответ 1
источник вашего script, не выполняйте его как ./foo.sh
или sh foo.sh
Если вы выполняете свой script, то он работает в суб-оболочке, а не в вашем текущем.
source foo.sh
будет работать для вас.
Мой псевдоним, определенный в образце shell script, не работает. И я новичок в Linux Shell Scripting. Ниже приведен пример файла оболочки
#!/bin/sh
echo "Setting Sample aliases ..."
alias xyz="cd /home/usr/src/xyz"
echo "Setting done ..."
При выполнении этого script, я вижу эхо-сообщения. Но если я выполняю команду alias, я вижу ошибку ниже
xyz: command not found
Мне что-то не хватает?
источник вашего script, не выполняйте его как ./foo.sh
или sh foo.sh
Если вы выполняете свой script, то он работает в суб-оболочке, а не в вашем текущем.
source foo.sh
будет работать для вас.
Для этого вам нужно установить конкретную опцию, expand_aliases
:
shopt -s expand_aliases
Пример:
# With option
$ cat a
#!/bin/bash
shopt -s expand_aliases
alias a="echo b"
type a
a
$ ./a
a is aliased to 'echo b'
b
# Without option
$ cat a
#!/bin/bash
alias a="echo b"
type a
a
$ ./a
./a: line 3: type: a: not found
./a: line 4: a: command not found
cf: https://unix.stackexchange.com/a/1498/27031 и https://askubuntu.com/a/98786/127746
поиск script source script.sh
./script.sh
будет выполняться в под-оболочке, и внесенные изменения применяются только к под-оболочке. Как только команда завершается, суб-оболочка переходит, а также выполняет изменения.
HACK: просто запустите следующую команду на оболочке, а затем выполните script.
alias xyz="cd /home/usr/src/xyz"
./script.sh
В unalias используйте следующую команду в командной строке
unalias xyz
Если вы выполните его в script, псевдоним будет завершен к завершению выполнения script.
Если вы хотите, чтобы он был постоянным:
Ваш псевдоним хорошо определен, но его нужно сохранить в ~/.bashrc
, а не в оболочке script.
Добавьте его в этот файл, а затем отправьте его с помощью . .bashrc
- он загрузит файл, чтобы можно было использовать псевдоним.
Если вы хотите, чтобы он использовался только в текущем сеансе:
Просто напишите в командной строке.
$ aa
The program 'aa' is currently not installed. ...
$
$ alias aa="echo hello"
$
$ aa
hello
$
Также: из ответа Кента мы можем видеть, что вы также можете source
его на source your_file
. В этом случае вам не нужно использовать shell script
, только обычный файл сделает это.
Ваш псевдоним должен быть в вашем файле .profile не в вашем script, если вы вызываете его в приглашении.
Если вы поместите псевдоним в свой script, тогда вы должны вызвать его в своем script.
Источник файла является правильным ответом при попытке запустить script, внутри которого есть псевдоним.
source yourscript.sh
Поместите свой псевдоним в файл с именем ~/.bash_aliases, а затем, во многих дистрибутивах, он будет загружен автоматически, не нужно вручную запускать исходную команду для его загрузки.
Вы можете использовать приведенную ниже команду.
shopt -s expand_aliases
source ~/.bashrc
eval $command