【问题标题】:How to pass positional arguments to an interactive bash session如何将位置参数传递给交互式 bash 会话
【发布时间】:2020-07-09 09:03:41
【问题描述】:

我想像这样启动一个交互式 bash shell:

bash (...some options) 1 2 3

所以在 shell 会话中,我有 $1=1, ...

我没有找到任何选项来实现这个效果。

我试过了,认为它可能会起作用:

bash -c bash _ 1 2 3

但它没有。

【问题讨论】:

    标签: bash interactive-shell positional-parameter


    【解决方案1】:

    来自bash invoking bash

    -s

    如果存在此选项,或者在选项处理后没有保留任何参数,则从标准输入读取命令。这 选项允许在调用时设置位置参数 交互式 shell 或通过管道读取输入时。

    $ bash -s 1 2 3
    $ echo $1
    1 
    $ exit
    $
    

    【讨论】:

    • 还有一个问题,当我在customized-bashrc 中bash --rcfile customized-bashrc -s 1 2 3 时,有没有办法获得“$@”?
    • @Philippe — 有两种可能性:是和否。您是否尝试过从自定义启动文件中访问$#"$@"$1 等?它们可用的可能性适中。在启动文件顶部附近添加echo "$0: ($#) $*" >&2,然后查看您的消息是否出现以及值是什么,这将是片刻的工作。这种上下文是为数不多的使用$* 而不是"$@" 的情况之一。当然你也可以写echo "$0: ($#)" "$@" >&2
    • @JonathanLeffler,在customized-bashrc中,我只放了echo "$@",它什么都没有。只有在shell本身,当我做echo "$@"时,我得到1 2 3跨度>
    • 当我输入customized-bashrc,echo $# - "$@" - $1,按照你的建议,我得到0 - -
    • 我开始阅读这方面的 bash 源代码,并在 calling startup_filebashrc 之前阅读 positional parameters are set up。但是$@ 在启动文件中是空的,所以我猜它在别的地方。作为一种解决方法,我看到这样做 like heresource 你的 rc 文件并手动传递 args。
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2013-01-01
    • 2018-10-17
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    相关资源
    最近更新 更多