亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 6898 | 回復(fù): 17
打印 上一主題 下一主題

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2004-09-06 10:04 |只看該作者 |倒序?yàn)g覽
shell十三問(wèn)中曾說(shuō)(command;command)是由subshell執(zhí)行的但請(qǐng)看下面的命令:
#a=b
#echo $$
1234
#(echo $a;echo $$)
#a
#1234
若將echo $a與echo $$放在腳本中執(zhí)行時(shí)無(wú)法取到變量a的值而且顯示的進(jìn)程號(hào)也是subshell的進(jìn)程號(hào)(進(jìn)程1234的子進(jìn)程)
()與腳本既然都是由subshell執(zhí)行為什么執(zhí)行的結(jié)果不一樣呢?
對(duì)于變量a我并沒(méi)有執(zhí)行export為什么用()執(zhí)行時(shí)可以取到變量啊呢?如果是由subshell執(zhí)行它應(yīng)該取不到變量a才對(duì),而且echo $$的結(jié)果也不應(yīng)是1234,應(yīng)是subshell的進(jìn)程號(hào)。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2004-09-06 12:04 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???

$$是登錄shell的PID

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
3 [報(bào)告]
發(fā)表于 2004-09-06 13:44 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???

我猜猜看, 不一定準(zhǔn):

( cmd ) 稱為 nested subshell , 其 env 與 parrent 是完全一至的...
若用 script, 那是一個(gè) fork, 其 env 來(lái)自 parent 的 export 及 initial scripts.

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2004-09-06 13:52 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???


  1. 您是對(duì)的:) 有短話,有興趣的人可以翻譯一下的

  2. A parenthesized command is also executed in a sub-shell without removing non-exported quantities
復(fù)制代碼

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2004-09-06 14:48 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???

但是(echo $$) 顯示的是父shell的id而不是子shell的id,給人的感覺(jué)好像是在當(dāng)前shell中執(zhí)行的,只不過(guò)是復(fù)制了一份父shell的環(huán)境,執(zhí)行(sleep 10)后用
ps -ef  觀察也未發(fā)現(xiàn)subshell的進(jìn)程。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2004-09-06 15:06 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???


  1. type sleep
  2. /usr/bin/sleep

  3. 這樣的進(jìn)程,可以認(rèn)為是sh exec sleep啟動(dòng)的.
  4. 先啟動(dòng)shell,然后exec sleep. exec 一個(gè)文件,
  5. 當(dāng)前的進(jìn)程空間就被exec的對(duì)象替換,所以你看不到子shell
復(fù)制代碼

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2004-09-06 15:36 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???

原帖由 "ivhb" 發(fā)表:
type sleep
/usr/bin/sleep

這樣的進(jìn)程,可以認(rèn)為是sh exec sleep啟動(dòng)的.
先啟動(dòng)shell,然后exec sleep. exec 一個(gè)文件,
當(dāng)前的進(jìn)程空間就被exec的對(duì)象替換,所以你看不到子shell



若是如此變量是如何繼承的呢?

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2004-09-06 15:59 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???

事實(shí)上,昨天我也在考慮這個(gè)問(wèn)題.不過(guò)沒(méi)有想出來(lái)
子shell到底怎樣繼承變量,還不是export出來(lái)的變量.呵呵,我搖頭了,真的不知道.

論壇徽章:
1
榮譽(yù)版主
日期:2011-11-23 16:44:17
9 [報(bào)告]
發(fā)表于 2004-09-06 16:30 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???

ivhb 兄不是點(diǎn)出了嗎:
"without removing non-exported quantities"

若 fork 出來(lái)的 subsell 被解讀為:
"with removing non-exported quantities"

這樣可理解嗎?

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2004-09-06 16:45 |只看該作者

用()執(zhí)行命令組與用腳本執(zhí)行為什么不同???

原帖由 "ivhb" 發(fā)表:
事實(shí)上,昨天我也在考慮這個(gè)問(wèn)題.不過(guò)沒(méi)有想出來(lái)
子shell到底怎樣繼承變量,還不是export出來(lái)的變量.呵呵,我搖頭了,真的不知道.

這需要在/etc/profile文件中export一個(gè)變量,
做一個(gè)實(shí)驗(yàn)
$a=aaa  #定義一個(gè)局部變量
$export bbb #定義一個(gè)全局環(huán)境
$echo $a $b
aaa bbb
$ksh  #進(jìn)入一個(gè)子shell
$echo $a $b
bbb   #結(jié)果顯示,$b被繼承下來(lái)了,而$a則"不見(jiàn)"了
如果說(shuō)"子shell到底怎樣繼承變量",我看也許讀一下shell source code,也許那里有答案
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP