Linux

如何將標準輸入傳遞給python腳本

  • June 23, 2022

我想將來自 shell 命令的輸入傳遞給使用 shell 命令的別名中的 python 腳本。

test.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

這意味著輸入字元串被傳遞給標準輸入,而不是腳本的參數。

我如何達到預期的效果?

alias test='echo $(python test.py $1)'

$1沒有在別名中定義,別名不是 shell 函式;它們只是文本替換;所以你test hello的擴展為echo $(python test.py ) hello,擴展為echo ['test.py'] hello.

如果你想要一個shell函式,寫一個!(並且不要呼叫您的 function 或 alias test,該名稱已為您的外殼中的邏輯評估事物保留)。

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

引用自:https://unix.stackexchange.com/questions/707188