在bash和zsh我曾经写过:
alias nb='cd /home/lincoln/Dropbox/nupis/ && jupyter notebook'
Run Code Online (Sandbox Code Playgroud)
但是在xonsh中,这会返回一个错误,指出找不到该命令.关于别名的教程部分说我应该做类似的事情:
aliases['g'] = 'git status -sb'
Run Code Online (Sandbox Code Playgroud)
我只能在一个命令的情况下完成这项工作,但是当我尝试我的bash示例的两个命令时,它抱怨我给了太多的输入cd
.
注意:我知道我可以从其他shell导入别名,但我有兴趣学习在xonsh中执行此操作.
在xonsh
shell 中,如何将 Python 构造的输出通过管道传输到另一个命令?所需的示例:
for v in ${...}: print ("{}={}".format(v,${v})) | head
Run Code Online (Sandbox Code Playgroud)
这for v in ...
是 Python 构造,head
也是我想要通过管道传输其输出的命令。
上面的命令行不起作用;我总是收到以下错误:
NameError: name 'head' is not defined
Run Code Online (Sandbox Code Playgroud)
看起来xonsh
没有为管道符号保留 Python 模式(请参阅xonsh 文档中的“管道”)。- 那么,我如何指示xonsh
将此处的管道字符理解为子进程模式符号?
我想用xonsh来压缩目录中的几个文件.我首先尝试以下方法:
$ ls
table_aa.csv table_amgn.csv table_csco.csv table_esrx.csv table_hal.csv table_jbl.csv table_pcg.csv table_zmh.csv
table_aapl.csv table_amzn.csv table_d.csv table_gas.csv table_hp.csv table_jpm.csv table_usb.csv
$ for fn in ls:
.. bzip2 fn
..
NameError: name 'ls' is not defined
Run Code Online (Sandbox Code Playgroud)
好的,所以我$()
明确使用
$ for fn in $(ls).split():
. bzip2 fn
bzip2: Can't open input file fn: No such file or directory.
bzip2: Can't open input file fn: No such file or directory.
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
$ xonsh --version
('xonsh/0.3.4',)
Run Code Online (Sandbox Code Playgroud) 我想用来对目录中的所有文件xonsh
执行。我可以使用,但这似乎是. 这是我迄今为止尝试过的:pandoc
md
subprocess
xonsh
from glob import glob
import os
for fn in glob('*.md'):
bname, _ = os.path.splitext(fn)
pandoc $fn > ${bname}.html
Run Code Online (Sandbox Code Playgroud)
有了这个,我得到了一个SyntaxError
:
SyntaxError: :3:11: ('code: $fn',) pandoc $fn > ${bname}.html
如果我将最后一行更改为: pandoc $fn > $bname.html
,我会得到:
pandoc: $fn: openBinaryFile: 不存在(没有那个文件或目录)
我认为问题在于for
循环内部是 Python 模式,但pandoc
调用必须处于子进程模式。这应该怎么做?