Skip to main content
Fixed a mistake
Source Link

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT:

When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

EDIT 2:

I'm sorry for the confusion, I was very tired when I wanted to run my remote script and now my memory was wrong, but I remember now what I did.

I tried with bash -lc after it didn't work with the mere command, but I missed the backslash! So I had ssh kalle@Raspi 'bash -lc "echo $PATH"' and as always when you give a command string to another command, the shell performs its various expansions on that command string.

So after quote removal, we have bash -lc "echo $PATH" which is passed to ssh as a single argument and executed on the remote machine, where the shell performs parameter substitution, i. e. $PATH is replaced by the default path before it is passed to bash -lc, making the latter useless.

And then I was stupid enough to forget that I was using bash -lc, so I thought ssh kalle@Raspi foo would cause .profile to be read because I saw the output of my echo command I had put in my .profile.

What a shame. I must have been really tired because when I wrote this question, it was absolutely natural to me that I have to protect the variable with a backslash; I didn't even have to think about it. But I still didn't realise what I realised now.

So the behavior is pretty clear and absolutely normal, but the problem remains.

I can use bash -lc as a workaround which – depending on the situation – can be a hassle with quoting and escaping, or I can put . .profile before the actual command.

Does anybody know a solution that is more elegant? Something I can adjust on the server so I can just use ssh kalle@Raspi foo?

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT:

When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

EDIT 2:

I'm sorry for the confusion, I was very tired when I wanted to run my remote script and now my memory was wrong, but I remember now what I did.

I tried with bash -lc after it didn't work with the mere command, but I missed the backslash! So I had ssh kalle@Raspi 'bash -lc "echo $PATH"' and as always when you give a command string to another command, the shell performs its various expansions on that command string.

So after quote removal, we have bash -lc "echo $PATH" which is passed to ssh as a single argument and executed on the remote machine, where the shell performs parameter substitution, i. e. $PATH is replaced by the default path before it is passed to bash -lc, making the latter useless.

And then I was stupid enough to forget that I was using bash -lc, so I thought ssh kalle@Raspi foo would cause .profile to be read because I saw the output of my echo command I had put in my .profile.

What a shame. I must have been really tired because when I wrote this question, it was absolutely natural to me that I have to protect the variable with a backslash; I didn't even have to think about it. But I still didn't realise what I realised now.

So the behavior is pretty clear and absolutely normal, but the problem remains.

I can use bash -lc as a workaround which – depending on the situation – can be a hassle with quoting and escaping, or I can put .profile before the actual command.

Does anybody know a solution that is more elegant? Something I can adjust on the server so I can just use ssh kalle@Raspi foo?

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT:

When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

EDIT 2:

I'm sorry for the confusion, I was very tired when I wanted to run my remote script and now my memory was wrong, but I remember now what I did.

I tried with bash -lc after it didn't work with the mere command, but I missed the backslash! So I had ssh kalle@Raspi 'bash -lc "echo $PATH"' and as always when you give a command string to another command, the shell performs its various expansions on that command string.

So after quote removal, we have bash -lc "echo $PATH" which is passed to ssh as a single argument and executed on the remote machine, where the shell performs parameter substitution, i. e. $PATH is replaced by the default path before it is passed to bash -lc, making the latter useless.

And then I was stupid enough to forget that I was using bash -lc, so I thought ssh kalle@Raspi foo would cause .profile to be read because I saw the output of my echo command I had put in my .profile.

What a shame. I must have been really tired because when I wrote this question, it was absolutely natural to me that I have to protect the variable with a backslash; I didn't even have to think about it. But I still didn't realise what I realised now.

So the behavior is pretty clear and absolutely normal, but the problem remains.

I can use bash -lc as a workaround which – depending on the situation – can be a hassle with quoting and escaping, or I can put . .profile before the actual command.

Does anybody know a solution that is more elegant? Something I can adjust on the server so I can just use ssh kalle@Raspi foo?

Improved layout
Source Link

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT:EDIT:

When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

EDIT 2:

I'm sorry for the confusion, I was very tired when I wanted to run my remote script and now my memory was wrong, but I remember now what I did.

I tried with bash -lc after it didn't work with the mere command, but I missed the backslash! So I had ssh kalle@Raspi 'bash -lc "echo $PATH"' and as always when you give a command string to another command, the shell performs its various expansions on that command string.

So after quote removal, we have bash -lc "echo $PATH" which is passed to ssh as a single argument and executed on the remote machine, where the shell performs parameter substitution, i. e. $PATH is replaced by the default path before it is passed to bash -lc, making the latter useless.

And then I was stupid enough to forget that I was using bash -lc, so I thought ssh kalle@Raspi foo would cause .profile to be read because I saw the output of my echo command I had put in my .profile.

What a shame. I must have been really tired because when I wrote this question, it was absolutely natural to me that I have to protect the variable with a backslash; I didn't even have to think about it. But I still didn't realise what I realised now.

So the behavior is pretty clear and absolutely normal, but the problem remains.

I can use bash -lc as a workaround which – depending on the situation – can be a hassle with quoting and escaping, or I can put .profile before the actual command.

Does anybody know a solution that is more elegant? Something I can adjust on the server so I can just use ssh kalle@Raspi foo?

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT: When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT:

When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

EDIT 2:

I'm sorry for the confusion, I was very tired when I wanted to run my remote script and now my memory was wrong, but I remember now what I did.

I tried with bash -lc after it didn't work with the mere command, but I missed the backslash! So I had ssh kalle@Raspi 'bash -lc "echo $PATH"' and as always when you give a command string to another command, the shell performs its various expansions on that command string.

So after quote removal, we have bash -lc "echo $PATH" which is passed to ssh as a single argument and executed on the remote machine, where the shell performs parameter substitution, i. e. $PATH is replaced by the default path before it is passed to bash -lc, making the latter useless.

And then I was stupid enough to forget that I was using bash -lc, so I thought ssh kalle@Raspi foo would cause .profile to be read because I saw the output of my echo command I had put in my .profile.

What a shame. I must have been really tired because when I wrote this question, it was absolutely natural to me that I have to protect the variable with a backslash; I didn't even have to think about it. But I still didn't realise what I realised now.

So the behavior is pretty clear and absolutely normal, but the problem remains.

I can use bash -lc as a workaround which – depending on the situation – can be a hassle with quoting and escaping, or I can put .profile before the actual command.

Does anybody know a solution that is more elegant? Something I can adjust on the server so I can just use ssh kalle@Raspi foo?

added 87 characters in body
Source Link

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT: When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

I'm experiencing a strange behavior when I try to execute one of my scripts on a remote machine via ssh.

I prepend the path to my scripts dir to $PATH in my .profile. But when I run ssh kalle@Raspi foo, I get "command not found".

ssh kalle@Raspi 'echo $PATH' gives the default value, and with variables I set and export in .profile, the output is empty.

I put an echo foo in .profile, and of course, it is printed. Then I put set -vx in the first line and the order of the printed lines is weird; e. g. "foo" is printed before "+echo foo".

Can anyone figure out what's going on?

EDIT: When I do ssh kalle@Raspi 'bash -lc "echo \$PATH"', I get my full path.

Source Link
Loading