我想将来自 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
没有在别名中定义,别名不是 shell 函数;它们只是文本替换;所以你test hello
的扩展为echo $(python test.py ) hello
,扩展为echo ['test.py'] hello
.如果你想要一个shell函数,写一个!(并且不要调用您的 function 或 alias
test
,该名称已为您的外壳中的逻辑评估事物保留)。但人们真的很想知道:为什么不简单地制作
test.py
可执行文件(例如chmod 755 test.py
)并#!/usr/bin/env python3
在其中包含第一行?然后你可以直接运行它:您的问题措辞令人困惑,但我似乎只想执行一个别名,将参数传递给您的脚本。
我想这就是你想要的。
如另外提到的,shell 函数可能比别名更可取——允许不那么琐碎的 arg 处理。
所以在这个例子中: