別名無法從 shell 腳本運行/執行? Mac OS X 塞拉利昂 13.x

別名無法從 shell 腳本運行/執行? Mac OS X 塞拉利昂 13.x

所以這個截圖基本上解釋了它

https://gyazo.com/1a9d621efa28c7994c3a2afbe0411a2b

我設定了一些別名,用於在終端中打開一個新選項卡,並執行其他操作,甚至是用於運行調試 shell 腳本的別名,但該debug.sh腳本只是使用別名newtab來嘗試打開一個新選項卡,這僅在.sh 或任何其他可執行檔中鍵入時有效newtab,但它不起作用,任何其他別名也不起作用,我該如何解決此問題?

我注意到的一件事是,我將所有的export' 和alias' 放入/etc/bashrcand not~/.bash_profile或其他中,而且我幾乎沒有/etc/bashrc在任何地方看到提及

我做對了嗎?

答案1

別名擴展僅從互動式 shell 中完成,而不是在腳本內debug完成,因此擴展為newtab,但newtab本身不擴展,因為它是從腳本呼叫的。

如果您使用匯出函數而不是別名,它將起作用:-

debug() { $scripts/debug.sh; }; export -f debug
...
newtab() { $scripts/newtab.osx.sh; }; export -f newtab

導出是必要的,因為腳本在子 shell 中運行,儘管對於您引用的特定實例,它只newtab需要是一個函數。

函數可以代替別名隨處使用,但可以做更多的事情,例如在運行字串的末尾添加一個額外的參數,這是別名無法做到的一個非常簡單的要求。事實上,它們可以做腳本能做的任何事情,但與它們在當前 shell 中運行的腳本不同,因此它們可以改變環境和當前目錄,為此腳本需要.source命令來實現。

相關內容