2016-01-19 99 views
4

Ubuntu使用的zsh,現在有一個alias我怎麼能使用別名xargs的

alias | grep sayhi 
sayhi='echo hi' 

sayhi foo 
hi foo 

不過,我不能在xargs或bash使用alias,見下文

➜ ~ echo foo | xargs -i sayhi {} 
xargs: sayhi: No such file or directory 
➜ ~ echo foo | awk '{print "sayhi "$0}' 
sayhi foo 
➜ ~ echo foo | awk '{print "sayhi "$0}'|bash 
bash: line 1: sayhi: command not found 

似乎我不能在命令行中間接使用alias

那麼在這種情況下如何使用alias

+0

如何使用「while read」? – yftse

+0

全局別名。但這是一件非常可怕的事情。 – 4ae1e1

回答

3

暫且不說,你正在處理兩種不同的炮彈事實:

  • xargs只能調用外部公用事業(可執行文件),因此按照定義它不能調用一個別名(直)。

  • 管道到bash將在過程,是不知道你當前的shell的別名(和非互動Bash的情況下,既不會讀平常資料/初始化文件,也沒有在默認情況下展開的別名)運行。

雖然你可能使其與許多扭曲該調用顯著複雜的工作,你最好的賭注是你的別名轉換爲腳本和有xargs/bash援引。

要得到相同的單字調用經驗與別名:

  • 創建腳本sayhi(沒有文件名後綴);例如內容,從你的後續問題採取:

    #!/bin/bash 
    echo hi [email protected] 
    
  • 使其直接可執行chmod +x sayhi - 這樣你就不必涉及外殼可執行文件來調用它。

  • 將其放置在您的$PATH變量中列出的目錄中。

然後,您將能夠像路徑中的任何其他可執行文件一樣調用您的腳本 - 僅通過文件名 - 以及來自問題的示例命令應該可以工作。

+0

謝謝,但請看我下面的答案 – zhuguowei