2013-12-18 40 views
1

問題DESCRIPT

方案

更新我的Mac和Ubuntu的服務器昨晚。還有一些奇怪的事情發生在「.bash_profile」和其他類似的文件上。怪異的行爲在Mac

變化

的Mac

在Mac上,我注意到兩個變化:

1.對這些文件的文件權限從744改爲644,因此我不能直接執行他們。如果我改回744,並執行它們,我有錯誤,如:

$ -bash(3663,0x7fff79abd310) malloc: *** error for object 0x7fb753d06160: pointer being  freed was not allocated 
$ *** set a breakpoint in malloc_error_break to debug 
$ Abort trap: 6 

2.And當我使用bash命令文件(644)

$ bash .bash_profile 

將部分工作,打印任何文件中的命令echo,但該文件中的alias命令不起作用。

只有用文件(644)

$ source .bash_profile 

作品既echoalias命令源命令。

而且我猜其中一些涉及文件權限問題alias,我使用:

$ sudo bash .bash_profile 

這是行不通的,無論是。

登錄後將同時工作echoalias

Ubuntu

第二次更改發生在我的Ubuntu服務器上,但不是第一次更改。

問題

  1. 做任何人有任何想法?爲什麼echo工作,但別名不?

  2. 我想這是一個新的更新。因爲我是管理員領域的新手,我不知道我在哪裏可以得到這種信息通知。

Thx很多!

+0

bash配置文件不應該*執行*,它應該*來源*到當前shell。因此它不需要執行權限。奇怪的錯誤,但。 –

+0

@glennjackman我想你是對的。不過,我曾經這樣做,它的工作。我不知道現在有什麼分歧。只是想知道。 – Archimedes520

回答

0

當您執行bash腳本時,該腳本將在腳本退出時死亡的新子shell中運行。所以你的別名命令只會影響這個子shell,而不會影響你執行腳本的外殼。但是,子shell仍然連接到與外殼相同的終端,這就是爲什麼您仍然可以看到echo命令的輸出。

當您輸入bash腳本時,不會生成子shell。相反,腳本中的命令按照您鍵入的方式一個一個地執行。因此,別名命令會在源自您的.bash_profile的同一個shell中調用,並且別名在該shell中可用。

+0

Thx,但是我記得在使用'。/'之前,「別名」有效。這有什麼解釋嗎? – Archimedes520

+0

你可能想到「。」而不是 」。/」? (「。」是「源」的同義詞) – fishyfriend