[英]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.