簡體   English   中英

如何在shell腳本中創建別名?

[英]How do create an alias in shell scripts?

在Linux系統上定義別名非常簡單。

從以下示例中我們看到: I_am_only_ls_alias alias命令將輸出作為ls命令提供給我們

 # alias I_am_only_ls_alias=ls
 # I_am_only_ls_alias

輸出:

file   file1

但是當我嘗試在bash腳本中執行相同操作( define alias I_am_only_ls_alias )時,我得到I_am_only_ls_alias: command not found

我的bash腳本示例:

alias_test.bash

#!/bin/bash

alias I_am_only_ls_alias=ls

I_am_only_ls_alias

運行bash腳本 - alias_test.bash

/tmp/alias_test.bash

輸出:

/tmp/: line 88: I_am_only_ls_alias: command not found

所以,首先我要問:

為什么bash不將命令I_am_only_ls_alias識別為別名?

為了在bash腳本中定義別名,我需要做些什么? 可能嗎?

bash手冊頁:

當shell不是交互式時,別名不會擴展,除非使用shopt設置expand_aliases shell選項(請參閱下面的SHELL BUILTIN命令下的shopt說明)。

所以這應該工作:

#!/bin/bash
shopt -s expand_aliases
alias I_am_only_ls_alias=ls
I_am_only_ls_alias

腳本通常使用函數,而不是別名。

Barmar的答案是包含alias的正確答案,但實際上你可能會發現Bash 函數更靈活/更有用。

例如,這與alias版本大致相同,但可以更容易地擴展:

timp@helez:~/tmp$ cat test.sh
#!/usr/bin/bash

function i_am_only_an_ls_func {
  ls $@
}

i_am_only_an_ls_func
timp@helez:~/tmp$ ./test.sh
0600871h.html
[snip]
timp@helez:~/tmp$

在這個例子中, $@是無關緊要的,但這意味着在ls命令之后將添加i_am_only_an_ls_func之后的任何內容,因為$@$1$2等包含函數的參數,與普通腳本非常相似。 (注意$0仍然是腳本的名稱而不是函數)

別名不能在您執行的shell腳本中定義 - 一旦shell進程完成執行,它們的效果就會消失。

你可以,但是,在你定義的別名~/.bashrc或在單獨的shell腳本,該腳本source從(但不執行!)。 在這種情況下,別名被導入到已經運行的shell進程中,因此可以存活並且實際上正如您所期望的那樣工作。

暫無
暫無

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

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