我有一个 .bashrc 文件需要以非交互方式获取。问题是文件上有这样的 return 语句,阻止通过代码进行采购:
[ -z "$PS1" ] && return
为了在不修改远程 .bashrc 文件的情况下解决这个问题cat
,我将这一行grep
及其source
如下所示:
user@host -t "
source <( echo \"\$(cat /home/release/.bashrc | grep -v \"return\")\" );
alias v;
v"
PS:我是否有来源.bash_配置文件结果就像我根本没有来源一样。
我觉得奇怪的是,如果我像这样声明一个别名:
alias v='cat somefile'
然后像以前一样运行这两个命令:
alias v;
v;
我得到以下内容输出对于每个:
alias v='cat somefile'
bash: v: command not found
我的问题是:如果它可以看到定义了别名,为什么它不能识别该命令?
答案1
从bash
手册页
当 shell 非交互式时,别名不会展开,除非使用 shopt 设置 Expand_aliases shell 选项
如您所知,当您运行 shell 脚本时,它会生成另一个子 shell,在该 shell 中运行脚本并将输出返回到当前 shell。因此,该脚本在非交互式 shell 中运行。
尽管我不建议,您可以使用以下命令更改此行为:
shopt -s expand_aliases
alias v='cat somefile'
v
你应该看到它工作了。反对使用它的建议来自于人们变得懒惰并认为事情是理所当然的并且忘记了他们做了什么。当您转向更好的牧场时,如果您需要将系统的控制权交给新的系统管理员,上帝保佑您。也许这个可怜的人根本不知道你做了什么,然后搬起石头砸自己的脚。我的建议是坚持简单且广为人知/接受的操作原则,而不是广泛定制的环境。