2011-03-09 22 views
28

在〜/ .bashrc中,我定義了一些別名。但是我不能在其他shell腳本中使用它們,我只能使用在那裏定義的別名。即使我採購了bashrc,它仍然無法工作。我該怎麼辦?如何在其他腳本中使用.bashrc中定義的別名?

PS。我在bash。

+2

關於drewrobb提到的內容,爲了讓這些別名與'.bashrc'腳本中的其他內容保持分離,您可能還希望將別名分隔到自己的文件中(例如'$ HOME /。別名「或別的東西),'shopt'和'source'來自你的其他shell腳本和你的'.bashrc'。這樣可以避免'.bashrc'中其他內容帶來的可能的副作用,同時仍然保留在一個地方以便於維護。 –

+0

否則,如果你可以避免通過執行產生一個子shell。 ./my-script.sh然後設置所有的別名。bashrc可用於您的腳本,無需任何額外的設置。 – anubhava

+0

它可以與其他別名文件一起使用!但爲什麼它不適用於bashrc? – Dutor

回答

24

您需要在腳本中做shopt -s expand_aliases以及採購~/.bashrc

+2

如果腳本無法修改,那麼該怎麼辦? –

+9

@iuliux:定義和導出函數。假設您的腳本使用不帶'-i'或'-v'的'mv',並且想要添加它們,但無法修改腳本。 'function mv(){command mv -iv「$ @」; }; export -f mv'現在你的腳本將使用這些選項。這就是爲什麼寫得很好的腳本使用絕對路徑來執行可執行文件(例如'/ bin/mv')的原因。它會阻止這項技術的運行,並且是很好的安全實踐。請將您的問題作爲一個新問題發佈,我會將其作爲答案發布。 –

2

我有這個問題,我用這個命令重新加載文件來解決它。

$ source ~/.bashrc 
+0

這不適合我! – Meliodas

0

有全球範圍內又未添加幾行你執行每個腳本的方式:通過使用BASH_ENV變量。

這裏是我安裝操作系統X 10.8.5:

/etc/launchd.conf:

setenv BASH_ENV /Users/DK/.env 

在〜/ .bash_profile:

# == Bash setup for interactive shells ==  
# === Environment for all shells === 
. $BASH_ENV  
# [skipped] 

〜/ .ENV:

# == Setup for all shells == 
# This is executed for all interactive and for non-interactive shells (e.g. scripts) 

shopt -s expand_aliases extglob xpg_echo 

# [skipped] Misc. variables and PATH setup 

# === General aliases === 

alias pause='echo "Press [Return] or [Enter] to continue..."; read' # read -p does not display prompt in Eclipse console 

# [skipped] 
1

從盜竊詢問ubuntu:別名不贊成使用shell函數。從bash手冊頁:

For almost every purpose, aliases are superseded by shell functions.

要創建一個函數,並將其導出到子shell,把你的~/.bashrc如下:

petsc() { 
    ~/petsc-3.2-p6/petsc-arch/bin/mpiexec "[email protected]" 
} 
export -f petsc 

然後你就可以自由地從你的腳本中調用你的命令。

+0

有沒有任何引用說別名是/將被棄用bash?這是不對的。 – Xen2050

+0

以上引用來自OS X的手冊頁。它表示「取代」,我說「已棄用」。也許它是一個措辭問題,但這聽起來像是他們不是做事情的首選方式。 – Trenton

+0

Debian手冊頁說同樣的事情,我不確定,但我認爲該行意味着如果一個別名和一個函數具有相同的名稱,該函數將優先,但它不會(不能創建一個函數與別名具有相同的名稱,但可以使用函數的名稱創建別名,然後僅使用別名「運行」),因此它有點模糊。 「棄用」這個詞確實很突出,因爲在「此功能已被棄用,並且將在更高版本中刪除」這似乎不是別名 – Xen2050

0

最簡單的答案是做2件重要的事情,否則它不會工作。

#!/bin/bash -i 

# Expand aliases defined in the shell ~/.bashrc 
shopt -s expand_aliases 

在此之後,您在〜/定義的.bashrc他們會在你的shell腳本(giga.sh或any.sh),並將這些腳本中的任何函數或子shell提供您的別名。

如果你不這樣做,你會得到一個錯誤:

your_cool_alias: command not found 
0

.bashrc是爲一個目的:爲您的交互式shell配置環境。如果您有想要在您的.bashrc和其他腳本之間共享的代碼,那麼它屬於和單獨的文件。

相關問題