subshell

    0熱度

    1回答

    我的理解是,當我使用類似$ ./myscript.sh的語法在BASH外殼中執行腳本時,啓動子外殼並在該外殼中運行代碼,同時打印STDOUT和STDERR輸出在我的外殼上,STDIN從我的外殼中取出。這是腳本如何互動。 文件「myscript」的第一行是#!/bin/bash,這表示解釋器用於在腳本文件中執行語法。 如果我使用語法source myscript.sh,腳本中的代碼被「拉」到我當前的

    4熱度

    1回答

    我知道管道會創建子shell。 我測試$BASH_SUBSHELL和$BASHPID,並找到$BASH_SUBSHELL不會管增加 echo $BASH_SUBSHELL # 0 echo $BASHPID # 8347 echo $BASH_SUBSHELL | cat # 0 echo $BASHPID | cat # 9727 (echo $BASH_SUBSHEL

    4熱度

    1回答

    我確定我缺少一些簡單的東西,但我使用的是執行腳本來調用一些實用程序腳本,並且我想處理所有來自實用程序的輸出通過一個管道。我的問題是實用程序使用stderr來報告錯誤情況,但我無法捕獲在父腳本中使用它。 父腳本: #!/bin/bash child 2>&1 >/dev/null 兒童腳本 #!/bin/bash echo "Print" echo "Error" 1>&2 我想到的是

    5熱度

    1回答

    開始我在看這個問題在這裏,但它似乎並沒有爲我工作:How to get the process id of a bash subprocess on command line 所以我命令我在一個子shell入手,如: (sleep 10 &) 我怎樣才能再拿到睡眠命令的進程ID,並等待它? 如果我在上面的鏈接中沒有任何進程ID匹配我所看到的之後執行ps命令。 謝謝。

    2熱度

    2回答

    例如,我有一個主外殼程序main.sh,並且我有另一個子shell程序sub.sh。我想將一個變量var傳遞給subshel​​l,但我不想使用命令行參數。一個例子代碼如下: #In main.sh a=1 ./sub.sh #In sub.sh echo $a 我想看到的輸出:1 我知道這個問題很奇怪,不過這個功能最適合我的需要。我無法獲得sub.sh,因爲在實際的程序中,我有很多

    1熱度

    4回答

    當我的bash腳本開始變得複雜時,我通常會將它們分解爲函數。這尤其適用於複雜的管道,因爲一系列複雜的管道命令(例如包含while循環)可能很快變得難以閱讀。當需要並行化時更是如此,其中xargs非常有用。 我知道我可以功能導出到一個子shell與export -f,從而在一個簡單的情況下,我可以做 export -f myfunction some-command | xargs -Iline

    3熱度

    1回答

    根據在bash(1)手冊頁,當我運行以下命令: set -e x=2 echo Start $x while [ $((x--)) -gt 0 ]; do echo Loop $x; done | cat echo End $x 輸出將是: Start 2 Loop 1 Loop 0 End 2 循環後(運行在一個子shell)變量x復位爲2.但是,如果我除去x將被更新的管:

    5熱度

    1回答

    給定文件"foo.txt",從創建: $ seq 1 10 > "foo.txt" 我想讀這兩個文件的第一個和最後一行,我開始通過重定向文件到子shell,使命令的列表將消耗文件中的序列 - 每個命令從最後一個命令離開時的點所消耗的輸入,我想: $ (head -1; tail -1) < "foo.txt" 1 10 但是,如果我試圖用臨時相同文件描述符,輸出是不一樣的: $ (he

    3熱度

    2回答

    我試圖限制在腳本中產生的子殼體數量,我使用它來嗅探內部網絡來審計網絡中的Linux服務器。該腳本按預期工作,但由於我嵌套for循環的方式,它爲每個網絡生成了255個子Shell,因此它殺死了CPU,因爲有超過1000個進程被產生。我需要能夠限制進程的數量,並且由於變量在Sub Shell中失去了它們的價值,所以我找不到一種方法來完成這個工作。同樣,腳本,但它只是產生一個噸的過程 - 我需要把它限制

    0熱度

    1回答

    我正在嘗試編寫一個bash腳本,該腳本在screen會話中執行命令,該會話在會話中顯示命令的輸出並在完成時通過電子郵件發送。然而,它並不總是工作,我不能解決原因。我已經蒸行爲,下面的例子: 命令 ls | tee >(mail -s 'my subject' [email protected]) 每次都工作正常,一樣 bash -c "ls | tee >(mail -s 'my subjec