簡體   English   中英

在bash別名中使用管道

[英]Using a pipe within a bash alias

我沒有shell腳本編寫經驗,因此無法看到以下情況的問題:

我已經定義了以下形式的別名( file.c位於~/dir ):

alias code="cd ~/dir | vim file.c"

輸入它時,出現以下警告,並且沒有打開正確的文件:

Vim: Warning: Input is not from a terminal
2 files to edit

我認為在這種情況下,管道運算符將分隔兩個命令,首先更改目錄,然后打開文件。

既然您提到您沒有shell經驗,那么我會很冗長。

問題是您使用的管道錯誤。

cmd1 | cmd2

表示將cmd1的輸出重定向到cmd2的輸入。 也許您將它與OR運算符||混淆了,該運算符可以用作:

cmd1 || cmd2

“如果cmd1不成功,請執行cmd2”。 但是,這對您沒有幫助。 前面的兩個答案都對您有用:

alias code="cd ~/dir; vim file.c"

使用分號,這只是一個簡單的命令分隔符。 還是我個人的最愛

alias code="cd ~/dir && vim file.c"

其中使用AND運算符。

cmd1 && cmd2

表示“執行cmd1。如果成功,則繼續執行cmd2。否則,停止”。

您不需要管道。 使用分號即命令分隔符。

alias code="cd ~/dir; vim file.c"

您還可以使用別名中的push和popd返回上一個目錄。

更好的別名是:

alias code="cd ~/dir && vim file.c && cd -"

如果cd失敗,這將確保您不會在當前目錄中打開文件,並返回到原來的目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM