如何将位置参数传递给交互式 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