我已經寫了這個東西,但它不起作用。我不知道為什么。該腳本不會創建任何別名。這是我的腳本:
#!/bin/bash
ans=t
while [ $ans == y ]; do
echo "Give alias name"
read name
echo "Give aliast instruction"
read instruction
echo "alias $name='$instruction'"
read ans
done
這可能是一個簡單的問題,我對 Linux 完全陌生。
uj5u.com熱心網友回復:
在 unix 派生系統中,讓行程(子行程)改變創建它的行程(父行程)的環境是不規則的。這與歷史上沒有行程概念的視窗形成鮮明對比。Windows,尤其是它的命令環境,將其執行模型歸功于 1970 年代稱為CP/M 的系統,它是從該系統克隆而來的。
在windows中,一個batch檔案可以改變當前shell的環境;例如,cd /temp將更改 shell 的當前目錄。在 Unix 派生系統中,情況并非如此。孩子不能改變父母的環境[當然有一個例外,下面];所以任何檔案打開、關閉、目錄更改、環境變數設定/重置等......都只會影響孩子。
因此,雖然您可能有一個包含 ``` alias bye=logout `` 的腳本,但該別名只會存在于腳本中。
一個例外是采購的概念。unix shell 通常有一個名為source(縮寫為.,如. myscript.sh)的命令,它不會創建一個新行程來運行myscript.sh,而只是在當前 shell 中包含myscript.sh。
使用source,在整理評論中提到的錯誤后,您可以達到您需要的效果。與此同時,你應該能夠找到類似這樣的東西``` alias bob="I need, I need, I need"
and verify that it works.
uj5u.com熱心網友回復:
“==”不是為了測驗相等。它是一個簡單的等號:“=”用于檢查它是否不同,它是:!=
要定義別名,您必須使用命令別名。
您必須使用以下命令執行腳本:
. ./script
第一個點很重要,否則腳本將由子外殼執行,別名定義將用于子外殼,而不是實際外殼。
#!/bin/bash
ans=t
while [ $ans != y ]; do
echo "Give alias name"
read name
echo "Give aliast instruction"
read instruction
alias "$name=$instruction"
read ans
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/364687.html
