dgo*_*o.a 18 session bash shell
有没有办法“好像”在新的登录会话中运行命令?
我已经试过了env -i。但是,我不想处理必须设置或取消设置的各种 ENV 变量。
我也试过bash -c "some command"and bash -l -c "some commmand",但它们都是复制当前环境。
我最接近的是一个不太干净的解决方案:
ssh me@localhost "some command"`
Run Code Online (Sandbox Code Playgroud)
Ell*_*ter 15
这是一个不需要 sudo 权限或用户密码的答案,但仍提供类似于您在全新登录时获得的环境。
env -i HOME="$HOME" bash -l -c 'your_command'
Run Code Online (Sandbox Code Playgroud)
例子:
$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123
Run Code Online (Sandbox Code Playgroud)
将其分解以进行解释:
env -i HOME="$HOME": 清除环境。该-i套了一个空的环境没有任何变数。这是有问题的,因为这意味着如果您尝试天真地运行bash -l它不会加载您的.bash_profile等,因为HOME未设置。为了缓解这种情况,我们明确地传递HOME="$HOME",创建一个环境,其中HOME(且仅HOME)设置了 。
bash -l -c ...: 在登录 shell 中运行所需的命令。您将需要一个登录 shell,因为我们从一个干净的环境开始,需要重新加载所有内容。
尤其:
sudo版本需要)。su版本需要)。ssh版本需要)。use*_*686 13
su -l $USER
sudo -u $USER -i
Run Code Online (Sandbox Code Playgroud)
对于更激进的 try env -i bash,但这会取消设置包括 $HOME 和 $TERM 在内的所有内容。
| 归档时间: |
|
| 查看次数: |
9645 次 |
| 最近记录: |