如何将位置参数传递给交互式 bash 会话

Posted

技术标签:

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

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

bash (...some options) 1 2 3

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

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

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

bash -c bash _ 1 2 3

但它没有。

【问题讨论】:

【参考方案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_file 和 bashrc 之前阅读 positional parameters are set up。但是$@ 在启动文件中是空的,所以我猜它在别的地方。作为一种解决方法,我看到这样做 like here 和 source 你的 rc 文件并手动传递 args。

以上是关于如何将位置参数传递给交互式 bash 会话的主要内容,如果未能解决你的问题,请参考以下文章

将位置参数传递给已注册的位置服务应用程序

将位置作为参数传递给 FragmentPagerAdapter 中的 Fragment

sh 如何将参数传递给Bash脚本

如何将数组参数传递给 Bash 脚本

如何将传递给我的 bash 脚本的所有参数传递给我的函数? [复制]

Google Cloud Functions - 为啥 GCF 将两个位置参数传递给我的函数?