在〜/ .bashrc中,我定義了一些別名。但是我不能在其他shell腳本中使用它們,我只能使用在那裏定義的別名。即使我採購了bashrc,它仍然無法工作。我該怎麼辦?如何在其他腳本中使用.bashrc中定義的別名?
PS。我在bash。
在〜/ .bashrc中,我定義了一些別名。但是我不能在其他shell腳本中使用它們,我只能使用在那裏定義的別名。即使我採購了bashrc,它仍然無法工作。我該怎麼辦?如何在其他腳本中使用.bashrc中定義的別名?
PS。我在bash。
您需要在腳本中做shopt -s expand_aliases
以及採購~/.bashrc
。
如果腳本無法修改,那麼該怎麼辦? –
@iuliux:定義和導出函數。假設您的腳本使用不帶'-i'或'-v'的'mv',並且想要添加它們,但無法修改腳本。 'function mv(){command mv -iv「$ @」; }; export -f mv'現在你的腳本將使用這些選項。這就是爲什麼寫得很好的腳本使用絕對路徑來執行可執行文件(例如'/ bin/mv')的原因。它會阻止這項技術的運行,並且是很好的安全實踐。請將您的問題作爲一個新問題發佈,我會將其作爲答案發布。 –
有全球範圍內又未添加幾行你執行每個腳本的方式:通過使用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]
從盜竊詢問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
然後你就可以自由地從你的腳本中調用你的命令。
最簡單的答案是做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
.bashrc
是爲一個目的:爲您的交互式shell配置環境。如果您有想要在您的.bashrc
和其他腳本之間共享的代碼,那麼它屬於的和單獨的文件。
關於drewrobb提到的內容,爲了讓這些別名與'.bashrc'腳本中的其他內容保持分離,您可能還希望將別名分隔到自己的文件中(例如'$ HOME /。別名「或別的東西),'shopt'和'source'來自你的其他shell腳本和你的'.bashrc'。這樣可以避免'.bashrc'中其他內容帶來的可能的副作用,同時仍然保留在一個地方以便於維護。 –
否則,如果你可以避免通過執行產生一個子shell。 ./my-script.sh然後設置所有的別名。bashrc可用於您的腳本,無需任何額外的設置。 – anubhava
它可以與其他別名文件一起使用!但爲什麼它不適用於bashrc? – Dutor