我正在嘗試編寫一個Python或Bash腳本,它可以直接向命令行輸出一個bash命令(例如,如果我只是鍵入它,然後可以按回車鍵執行它)。Python或Bash打印輸出到命令行準備執行
如何以這種方式輸出命令?
我正在嘗試編寫一個Python或Bash腳本,它可以直接向命令行輸出一個bash命令(例如,如果我只是鍵入它,然後可以按回車鍵執行它)。Python或Bash打印輸出到命令行準備執行
如何以這種方式輸出命令?
我認爲這是不可能在bash
。然而,該提示的功能性的合理子集可以被在bash
4或以後用read
內置,並立即執行輸入與eval
模擬:
$ read -ei "ls -l"; eval "$REPLY"
隱續行不可用,例如,如果你以|
結束該行;您需要明確提供續行字符,並且下一行也將插入了初始文本,因此您必須在繼續之前清除該行。
使用BASH,您可以使用select builtin命令輕鬆完成此操作。這裏有一個很好的例子:http://linux.die.net/Bash-Beginners-Guide/sect_09_06.html
vim-slime通過screen
或tmux
完成類似的事情。這裏的概念在猛砸爲tmux
下運行的證明:使用這個從Python的
print_to_cmd_line() {
printf '%s' "$*" | tmux load-buffer -
tmux paste-buffer -d
}
cmd=(ls -l "hello world") # given an array as input
printf '%q ' -v cmd_quoted "${cmd[@]}" # transform it to an eval-safe string
echo "Run the following: $cmd_quoted" # ...which can then be run by the user
一種方法是管內容來砸(你當然也可以通過subprocess.Popen()
運行相關的bash腳本) :
#!/usr/bin/env python
import sys
cmd=['ls', '-l', 'hello world']
for element in cmd:
sys.stdout.write('%s\0' % element)
...並在bash,以讀取NUL分隔的輸入和寫EVAL-safe命令:
#!/usr/bin/bash
arr=()
while IFS= read -r -d '' entry
arr+=("$entry")
done
printf '%q ' "${arr[@]}"
printf '\n'
...那麼,綁在一起:
./python-gen-cmd | ./bash-gen-cmd
...會給你一個安全的命令在標準輸出上,準備複製和粘貼,或發送通過SSH連接。即使您的命令包含不可打印的字符或類似的奇怪,這也可以工作。
如果你使用Python,你可以在仍然使用Python執行命令的地方執行它。我發現這個http://stackoverflow.com/questions/4760215/running-shell-command-from-python-and-capturing-the-output有一個快速搜索,所以你應該能夠找到關於如何做的足夠的信息它。 –
謝謝,但我希望它被輸出到bash命令行,所以我可以通過按回車來執行它,如果我選擇執行它。我也知道如何去做你在bash中的建議。我希望將命令輸出到命令行,而不是執行。 – RCCola
它爲什麼需要在命令行上?爲什麼不讓程序在運行命令前打印命令並等待用戶輸入(如果不想運行該命令,可以取消程序)? –