我想将 shell 命令的输入传递到使用 shell 命令的别名中的 python 脚本。
测试.py:
import sys
print(sys.argv)
别名
alias foo='echo $(python test.py $1)'
因为$ python cd_alias_test.py hello
会打印所有参数:['test.py', 'hello']
我希望这个别名也能做同样的事情。然而它的标准输出是
['test.py'] hello
这意味着输入字符串被传递到标准输入,而不是脚本的参数。
我怎样才能达到预期的效果?
答案1
alias test='echo $(python test.py $1)'
$1
未在别名中定义,别名不是 shell 函数;它们只是文本替换;所以你的test hello
扩展为echo $(python test.py ) hello
,它扩展为echo ['test.py'] hello
。
如果你想要一个 shell 函数,就写一个吧! (并且不要调用您的函数或别名test
,该名称已经为 shell 中的逻辑评估事物保留)。
function foo() { echo $(python test.py $1) }
foo hello
但人们确实想知道:为什么不简单地制作test.py
可执行文件(例如chmod 755 test.py
)并#!/usr/bin/env python3
在其中包含第一行?然后直接运行即可:
./test.py hello darkness my old friend
答案2
您的问题措辞混乱,但我似乎您只想执行一个别名,将参数传递给脚本。
我想这就是你想要的。
alias runtest='python test.py'
正如另外提到的,shell 函数比别名更可取——允许较少的琐碎参数处理。
所以在这个例子中:
function runtest() { python test.py "$1" ; }