【问题标题】:Use a grepped file as an included source in bash使用 grepped 文件作为 bash 中的包含源
【发布时间】:2011-01-28 00:02:39
【问题描述】:

我在一个共享的虚拟主机上,我没有在/ect/bashrc 编辑全局 bash 配置文件的权限。不幸的是,全局文件中有一行 mesg y,它将终端置于 tty 模式,并使 scp 和类似的命令不可用。我的本地 ~./bashrc 包含全局文件作为源,如下所示:

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

我当前的解决方法是使用grep 将全局文件(无违规行)输出到本地文件中,并使用 that 作为源。

# Source global definitions
if [ -f /etc/bashrc ]; then
    grep -v mesg /etc/bashrc > ~/.bash_global
    . ~/.bash_global
fi

有没有办法在没有创建实际文件的中间步骤的情况下包含这样的 grepped 文件?像这样?

. grep -v mesg /etc/bashrc > ~/.bash_global

【问题讨论】:

  • 为什么不在 ~/.bashrc 中使用mesg n?在任何情况下,您都可以指定文件到 grep 或重定向 grep 的标准输入;不要无用地使用猫。
  • 'Grokked' 不是 'grep' 的过去式。 google.com/search?q=define:grok
  • 更改为 grepped...mesg n 似乎仍然强制终端进入某种类型的 tty 会话

标签: bash grep


【解决方案1】:

丢了猫,没用的

source <(grep -v "mesg" /etc/bashrc)

&lt;() 语法称为process substitution

【讨论】:

    【解决方案2】:
    . <(grep -v mesg /etc/bashrc)
    

    【讨论】:

    • 做到了。我想我正在寻找 &lt;() 语法。
    【解决方案3】:

    我建议致电mesg n :)

    【讨论】:

    • 在全局调用mesg y 之后调用mesg n 似乎仍然强制它进入tty 模式。我仍然收到stdin: is not a tty 作为错误...
    【解决方案4】:

    根据记忆,但类似

    grep -v mesg /etc/bashrc | eval
    

    应该做的伎俩

    由于我不确定 eval 是否会读取标准输入,您可能需要将其改写为

    eval `grep -v mesg /etc/bashrc`
    

    【讨论】:

    • 但是我怎样才能将它用作. 命令的源? . eval stuff`` 不起作用……
    • 你不需要来源它.. eval 基本上会做同样的事情
    • 你试过了吗?创建一个名为“testprofile”的简单文件,在其中export TEST="something"。现在,在testprofile 上执行grepeval,看看$TEST 是否有值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多