Unexpected behavior of Bash script: First executes function, afterwards executes aliasAlias and functionsIn...
What type of postprocessing gives the effect of people standing out
You'll find me clean when something is full
Contradiction with Banach Fixed Point Theorem
Exponential growth/decay formula: what happened to the other constant of integration?
How can atoms be electrically neutral when there is a difference in the positions of the charges?
Reason Why Dimensional Travelling Would be Restricted
Waiting for the gravy at a dinner table
Is there any relevance to Thor getting his hair cut other than comedic value?
How to count occurrences of Friday 13th
What is the difference between throw e and throw new Exception(e)?
Closure of presentable objects under finite limits
Creature spells vs. ability to convert a permanent into a creature
Called into a meeting and told we are being made redundant (laid off) and "not to share outside". Can I tell my partner?
What is a term for a function that when called repeatedly, has the same effect as calling once?
What if I store 10TB on azure servers and then keep the vm powered off?
Skis versus snow shoes - when to choose which for travelling the backcountry?
Can I become debt free or should I file for bankruptcy? How do I manage my debt and finances?
Where was Karl Mordo in Infinity War?
Is there a low-level alternative to Animate Objects?
Is divide-by-zero a security vulnerability?
What is better: yes / no radio, or simple checkbox?
Replacement ford fiesta radiator has extra hose
Make me a metasequence
As a new poet, where can I find help from a professional to judge my work?
Unexpected behavior of Bash script: First executes function, afterwards executes alias
Alias and functionsIn Bash, when to alias, when to script, and when to write a function?Bash function to scp a file not workingcalling Bash Function from alias definitionExecuting a Bash Script Function with SudoBash script works via terminal but not via main menuHow to save a function in bash for later use?Bash interactive - entire script writing to historyWhat is the correct way to assign a function containing chained commands to an alias in .bashrc?Why is an alias in a script being sourced in an interactive bash process not expanded?Writing a script containing just one function definition v.s. moving the code in function body to the script?
When I execute the following script
#!/usr/bin/env bash
main() {
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
}
function Hi() {
echo "Hi from function"
}
main "$@"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from function
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
Why is it so?
This does not happen in the following case
#!/usr/bin/env bash
function Hi() {
echo "Hi from function"
}
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
bash scripting alias function
add a comment |
When I execute the following script
#!/usr/bin/env bash
main() {
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
}
function Hi() {
echo "Hi from function"
}
main "$@"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from function
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
Why is it so?
This does not happen in the following case
#!/usr/bin/env bash
function Hi() {
echo "Hi from function"
}
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
bash scripting alias function
add a comment |
When I execute the following script
#!/usr/bin/env bash
main() {
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
}
function Hi() {
echo "Hi from function"
}
main "$@"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from function
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
Why is it so?
This does not happen in the following case
#!/usr/bin/env bash
function Hi() {
echo "Hi from function"
}
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
bash scripting alias function
When I execute the following script
#!/usr/bin/env bash
main() {
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
}
function Hi() {
echo "Hi from function"
}
main "$@"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from function
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
Why is it so?
This does not happen in the following case
#!/usr/bin/env bash
function Hi() {
echo "Hi from function"
}
shopt -s expand_aliases
alias Hi='echo "Hi from alias"'
Hi # Should Execute the alias
Hi # Should Execute the function
"Hi"
Very first time it executes the function and then always executes as alias:
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
$ . Sample.sh
Hi from alias
Hi from function
Hi from function
bash scripting alias function
bash scripting alias function
edited 12 hours ago
Nikhil
asked 12 hours ago
NikhilNikhil
310112
310112
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Alias expansion in a function is done when the function is read, not when the function is executed. The alias definition in the function is executed when the function is executed.
See Alias and functions
and https://www.gnu.org/software/bash/manual/html_node/Aliases.html
This means, the alias will be defined when function main
is executed, but when the function was read for the first time the alias was not yet defined. So the first time function main
will execute function Hi
three times.
When you source the script for the second time, the alias is already defined from the previous run and can be expanded when the function definition is read. When you now call the function it is run with the alias expanded.
The different behavior occurs only when the script is sourced with . Sample.sh
, i.e. when it is run in the same shell several times. When you run it in a separate shell as ./Sample.sh
it will always show the behavior of the first run.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f504258%2funexpected-behavior-of-bash-script-first-executes-function-afterwards-executes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Alias expansion in a function is done when the function is read, not when the function is executed. The alias definition in the function is executed when the function is executed.
See Alias and functions
and https://www.gnu.org/software/bash/manual/html_node/Aliases.html
This means, the alias will be defined when function main
is executed, but when the function was read for the first time the alias was not yet defined. So the first time function main
will execute function Hi
three times.
When you source the script for the second time, the alias is already defined from the previous run and can be expanded when the function definition is read. When you now call the function it is run with the alias expanded.
The different behavior occurs only when the script is sourced with . Sample.sh
, i.e. when it is run in the same shell several times. When you run it in a separate shell as ./Sample.sh
it will always show the behavior of the first run.
add a comment |
Alias expansion in a function is done when the function is read, not when the function is executed. The alias definition in the function is executed when the function is executed.
See Alias and functions
and https://www.gnu.org/software/bash/manual/html_node/Aliases.html
This means, the alias will be defined when function main
is executed, but when the function was read for the first time the alias was not yet defined. So the first time function main
will execute function Hi
three times.
When you source the script for the second time, the alias is already defined from the previous run and can be expanded when the function definition is read. When you now call the function it is run with the alias expanded.
The different behavior occurs only when the script is sourced with . Sample.sh
, i.e. when it is run in the same shell several times. When you run it in a separate shell as ./Sample.sh
it will always show the behavior of the first run.
add a comment |
Alias expansion in a function is done when the function is read, not when the function is executed. The alias definition in the function is executed when the function is executed.
See Alias and functions
and https://www.gnu.org/software/bash/manual/html_node/Aliases.html
This means, the alias will be defined when function main
is executed, but when the function was read for the first time the alias was not yet defined. So the first time function main
will execute function Hi
three times.
When you source the script for the second time, the alias is already defined from the previous run and can be expanded when the function definition is read. When you now call the function it is run with the alias expanded.
The different behavior occurs only when the script is sourced with . Sample.sh
, i.e. when it is run in the same shell several times. When you run it in a separate shell as ./Sample.sh
it will always show the behavior of the first run.
Alias expansion in a function is done when the function is read, not when the function is executed. The alias definition in the function is executed when the function is executed.
See Alias and functions
and https://www.gnu.org/software/bash/manual/html_node/Aliases.html
This means, the alias will be defined when function main
is executed, but when the function was read for the first time the alias was not yet defined. So the first time function main
will execute function Hi
three times.
When you source the script for the second time, the alias is already defined from the previous run and can be expanded when the function definition is read. When you now call the function it is run with the alias expanded.
The different behavior occurs only when the script is sourced with . Sample.sh
, i.e. when it is run in the same shell several times. When you run it in a separate shell as ./Sample.sh
it will always show the behavior of the first run.
edited 12 hours ago
answered 12 hours ago
BodoBodo
1,993314
1,993314
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f504258%2funexpected-behavior-of-bash-script-first-executes-function-afterwards-executes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown