watch aliased cmd doesn't work
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
When I do
$ watch kubectl get pods
it works fine but on doing:
$ alias p0="kubectl get pods"
$ watch p0
gives an error:
Every 2.0s: p0
sh: p0: command not found
It looks like watch is starting a subshell and the aliases in my current shell aren't visible to the subshell. I do have
$ shopt -s expand_aliases
at the very top of my .bashrc but it isn't helping.
Trying this with bash version 3.2.57 on Mac OS Mojave.
Update:
Tried a few more things:
$ watch -n 0.1 "source ~/.bashrc; shopt; alias p0; p0"
still doesn't work.
cdable_vars off
cdspell off
checkhash off
checkwinsize off
cmdhist on
compat31 off
dotglob off
execfail off
expand_aliases on
extdebug off
extglob off
extquote on
failglob off
force_fignore on
gnu_errfmt off
histappend on
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo on
p0='kubectl get pods' <--- HERE'S THE ALIAS
sh: p0: command not found <--- STILL DOESN'T EXECUTE IT.
bash bash-scripting
add a comment |
When I do
$ watch kubectl get pods
it works fine but on doing:
$ alias p0="kubectl get pods"
$ watch p0
gives an error:
Every 2.0s: p0
sh: p0: command not found
It looks like watch is starting a subshell and the aliases in my current shell aren't visible to the subshell. I do have
$ shopt -s expand_aliases
at the very top of my .bashrc but it isn't helping.
Trying this with bash version 3.2.57 on Mac OS Mojave.
Update:
Tried a few more things:
$ watch -n 0.1 "source ~/.bashrc; shopt; alias p0; p0"
still doesn't work.
cdable_vars off
cdspell off
checkhash off
checkwinsize off
cmdhist on
compat31 off
dotglob off
execfail off
expand_aliases on
extdebug off
extglob off
extquote on
failglob off
force_fignore on
gnu_errfmt off
histappend on
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo on
p0='kubectl get pods' <--- HERE'S THE ALIAS
sh: p0: command not found <--- STILL DOESN'T EXECUTE IT.
bash bash-scripting
add a comment |
When I do
$ watch kubectl get pods
it works fine but on doing:
$ alias p0="kubectl get pods"
$ watch p0
gives an error:
Every 2.0s: p0
sh: p0: command not found
It looks like watch is starting a subshell and the aliases in my current shell aren't visible to the subshell. I do have
$ shopt -s expand_aliases
at the very top of my .bashrc but it isn't helping.
Trying this with bash version 3.2.57 on Mac OS Mojave.
Update:
Tried a few more things:
$ watch -n 0.1 "source ~/.bashrc; shopt; alias p0; p0"
still doesn't work.
cdable_vars off
cdspell off
checkhash off
checkwinsize off
cmdhist on
compat31 off
dotglob off
execfail off
expand_aliases on
extdebug off
extglob off
extquote on
failglob off
force_fignore on
gnu_errfmt off
histappend on
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo on
p0='kubectl get pods' <--- HERE'S THE ALIAS
sh: p0: command not found <--- STILL DOESN'T EXECUTE IT.
bash bash-scripting
When I do
$ watch kubectl get pods
it works fine but on doing:
$ alias p0="kubectl get pods"
$ watch p0
gives an error:
Every 2.0s: p0
sh: p0: command not found
It looks like watch is starting a subshell and the aliases in my current shell aren't visible to the subshell. I do have
$ shopt -s expand_aliases
at the very top of my .bashrc but it isn't helping.
Trying this with bash version 3.2.57 on Mac OS Mojave.
Update:
Tried a few more things:
$ watch -n 0.1 "source ~/.bashrc; shopt; alias p0; p0"
still doesn't work.
cdable_vars off
cdspell off
checkhash off
checkwinsize off
cmdhist on
compat31 off
dotglob off
execfail off
expand_aliases on
extdebug off
extglob off
extquote on
failglob off
force_fignore on
gnu_errfmt off
histappend on
histreedit off
histverify off
hostcomplete on
huponexit off
interactive_comments on
lithist off
login_shell off
mailwarn off
no_empty_cmd_completion off
nocaseglob off
nocasematch off
nullglob off
progcomp on
promptvars on
restricted_shell off
shift_verbose off
sourcepath on
xpg_echo on
p0='kubectl get pods' <--- HERE'S THE ALIAS
sh: p0: command not found <--- STILL DOESN'T EXECUTE IT.
bash bash-scripting
bash bash-scripting
edited Mar 12 at 6:31
user674669
asked Mar 12 at 5:58
user674669user674669
193217
193217
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Aliases are not inherited by subshells. Functions may be exported but while this approach makes Bash inherit exported function(s) from Bash, watch
will interfere, mainly because it spawns sh
, not bash
.
You have at least three options:
Make
p0
a script somewhere in$PATH
, sowatch
can run it like any other executable. If done right, this will be very robust.
Define a special alias for
watch
:
alias watch='watch '
Then this happens:
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
source
So
watch p0
will work (butwatch -n 4 p0
won't).
Define an alias (or function, or script, whatever) for the whole command:
alias wp0='watch kubectl get pods'
and type just
wp0
.
Great answer @Kamil. Reg. your first answer, I could make it a script. However, I have hundreds of aliases collected over the years and making them individual scripts seems like a lot of work.
– user674669
Mar 12 at 6:40
1
+1 on yr 2nd point. Been using aliases for yrs w/o ever having come across that nugget.
– Cbhihe
Mar 12 at 7:18
add a comment |
function watcha() {
a=$(alias $1) # extract the cmd from the alias
#remove = sign and first/last ' before executing thru watch
watch $(echo $a | awk -F= '{print $2}'|sed 's/.$//'|sed 's/^.//')
}
Now when I do
$ watcha p0
it does work as expected.
alias watcha='watch '
seems more robust and so much simpler.
– Kamil Maciorowski
Mar 13 at 16:37
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
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: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
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%2fsuperuser.com%2fquestions%2f1413282%2fwatch-aliased-cmd-doesnt-work%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Aliases are not inherited by subshells. Functions may be exported but while this approach makes Bash inherit exported function(s) from Bash, watch
will interfere, mainly because it spawns sh
, not bash
.
You have at least three options:
Make
p0
a script somewhere in$PATH
, sowatch
can run it like any other executable. If done right, this will be very robust.
Define a special alias for
watch
:
alias watch='watch '
Then this happens:
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
source
So
watch p0
will work (butwatch -n 4 p0
won't).
Define an alias (or function, or script, whatever) for the whole command:
alias wp0='watch kubectl get pods'
and type just
wp0
.
Great answer @Kamil. Reg. your first answer, I could make it a script. However, I have hundreds of aliases collected over the years and making them individual scripts seems like a lot of work.
– user674669
Mar 12 at 6:40
1
+1 on yr 2nd point. Been using aliases for yrs w/o ever having come across that nugget.
– Cbhihe
Mar 12 at 7:18
add a comment |
Aliases are not inherited by subshells. Functions may be exported but while this approach makes Bash inherit exported function(s) from Bash, watch
will interfere, mainly because it spawns sh
, not bash
.
You have at least three options:
Make
p0
a script somewhere in$PATH
, sowatch
can run it like any other executable. If done right, this will be very robust.
Define a special alias for
watch
:
alias watch='watch '
Then this happens:
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
source
So
watch p0
will work (butwatch -n 4 p0
won't).
Define an alias (or function, or script, whatever) for the whole command:
alias wp0='watch kubectl get pods'
and type just
wp0
.
Great answer @Kamil. Reg. your first answer, I could make it a script. However, I have hundreds of aliases collected over the years and making them individual scripts seems like a lot of work.
– user674669
Mar 12 at 6:40
1
+1 on yr 2nd point. Been using aliases for yrs w/o ever having come across that nugget.
– Cbhihe
Mar 12 at 7:18
add a comment |
Aliases are not inherited by subshells. Functions may be exported but while this approach makes Bash inherit exported function(s) from Bash, watch
will interfere, mainly because it spawns sh
, not bash
.
You have at least three options:
Make
p0
a script somewhere in$PATH
, sowatch
can run it like any other executable. If done right, this will be very robust.
Define a special alias for
watch
:
alias watch='watch '
Then this happens:
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
source
So
watch p0
will work (butwatch -n 4 p0
won't).
Define an alias (or function, or script, whatever) for the whole command:
alias wp0='watch kubectl get pods'
and type just
wp0
.
Aliases are not inherited by subshells. Functions may be exported but while this approach makes Bash inherit exported function(s) from Bash, watch
will interfere, mainly because it spawns sh
, not bash
.
You have at least three options:
Make
p0
a script somewhere in$PATH
, sowatch
can run it like any other executable. If done right, this will be very robust.
Define a special alias for
watch
:
alias watch='watch '
Then this happens:
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
source
So
watch p0
will work (butwatch -n 4 p0
won't).
Define an alias (or function, or script, whatever) for the whole command:
alias wp0='watch kubectl get pods'
and type just
wp0
.
edited Mar 12 at 6:55
answered Mar 12 at 6:31
Kamil MaciorowskiKamil Maciorowski
29.2k156288
29.2k156288
Great answer @Kamil. Reg. your first answer, I could make it a script. However, I have hundreds of aliases collected over the years and making them individual scripts seems like a lot of work.
– user674669
Mar 12 at 6:40
1
+1 on yr 2nd point. Been using aliases for yrs w/o ever having come across that nugget.
– Cbhihe
Mar 12 at 7:18
add a comment |
Great answer @Kamil. Reg. your first answer, I could make it a script. However, I have hundreds of aliases collected over the years and making them individual scripts seems like a lot of work.
– user674669
Mar 12 at 6:40
1
+1 on yr 2nd point. Been using aliases for yrs w/o ever having come across that nugget.
– Cbhihe
Mar 12 at 7:18
Great answer @Kamil. Reg. your first answer, I could make it a script. However, I have hundreds of aliases collected over the years and making them individual scripts seems like a lot of work.
– user674669
Mar 12 at 6:40
Great answer @Kamil. Reg. your first answer, I could make it a script. However, I have hundreds of aliases collected over the years and making them individual scripts seems like a lot of work.
– user674669
Mar 12 at 6:40
1
1
+1 on yr 2nd point. Been using aliases for yrs w/o ever having come across that nugget.
– Cbhihe
Mar 12 at 7:18
+1 on yr 2nd point. Been using aliases for yrs w/o ever having come across that nugget.
– Cbhihe
Mar 12 at 7:18
add a comment |
function watcha() {
a=$(alias $1) # extract the cmd from the alias
#remove = sign and first/last ' before executing thru watch
watch $(echo $a | awk -F= '{print $2}'|sed 's/.$//'|sed 's/^.//')
}
Now when I do
$ watcha p0
it does work as expected.
alias watcha='watch '
seems more robust and so much simpler.
– Kamil Maciorowski
Mar 13 at 16:37
add a comment |
function watcha() {
a=$(alias $1) # extract the cmd from the alias
#remove = sign and first/last ' before executing thru watch
watch $(echo $a | awk -F= '{print $2}'|sed 's/.$//'|sed 's/^.//')
}
Now when I do
$ watcha p0
it does work as expected.
alias watcha='watch '
seems more robust and so much simpler.
– Kamil Maciorowski
Mar 13 at 16:37
add a comment |
function watcha() {
a=$(alias $1) # extract the cmd from the alias
#remove = sign and first/last ' before executing thru watch
watch $(echo $a | awk -F= '{print $2}'|sed 's/.$//'|sed 's/^.//')
}
Now when I do
$ watcha p0
it does work as expected.
function watcha() {
a=$(alias $1) # extract the cmd from the alias
#remove = sign and first/last ' before executing thru watch
watch $(echo $a | awk -F= '{print $2}'|sed 's/.$//'|sed 's/^.//')
}
Now when I do
$ watcha p0
it does work as expected.
answered Mar 12 at 7:02
user674669user674669
193217
193217
alias watcha='watch '
seems more robust and so much simpler.
– Kamil Maciorowski
Mar 13 at 16:37
add a comment |
alias watcha='watch '
seems more robust and so much simpler.
– Kamil Maciorowski
Mar 13 at 16:37
alias watcha='watch '
seems more robust and so much simpler.– Kamil Maciorowski
Mar 13 at 16:37
alias watcha='watch '
seems more robust and so much simpler.– Kamil Maciorowski
Mar 13 at 16:37
add a comment |
Thanks for contributing an answer to Super User!
- 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%2fsuperuser.com%2fquestions%2f1413282%2fwatch-aliased-cmd-doesnt-work%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