2016-05-17 30 views
1

我想在C進入我在我家目錄做了一個特定的文件夾,使一個簡單的程序,清除終端屏幕,並列出什麼是文件夾中:進入c中使用bash的一個文件夾

#include <stdlib.h> 

void main() 
{ 
    system("cd"); 
    system("cd Desktop"); 
    system("clear"); 
    system("ls"); 
} 

當我編譯並運行它時,它會列出我的主目錄中的所有內容,而不會移動到我指定的文件夾中。我試圖製作一個腳本,可以在任何地方運行在我的終端中,以便到達我的工作文件夾(我很懶),所以我也想知道如何在終端中使其成爲命令(就像您鍵入不管你的目錄是什麼,它都可以做你想做的事)。

對不起,在這裏提出兩個問題,但他們感覺有點相關。

+3

每個'system'調用運行在一個獨立的子進程中,並且每個都是獨立的。從一個'system'調用對環境的任何更改都不會影響原始進程,也不會影響其他任何後續的'system'調用。你最好寫一個真正的bash腳本,而不是像這樣的C程序。 – kaylum

+0

@kaylum你知道我可以在c程序中執行一個bash腳本(爲簡單起見,它們都在同一個目錄中)? – someoneb100

回答

2

system在單獨的進程中運行,並且當進程結束時,任何環境更改(如當前目錄的更改)都將被丟棄。

既然你想要做幾個命令,你可以把它們放在一個shell腳本中。

或者你可以運行的東西做的ls在一個調用system

system("clear"); 
system("/bin/sh ls $HOME/Desktop"); 

我用sh運行ls以訪問的$HOME shell擴展。

至於你的第二個問題:

使你的程序運行,因爲它需要在是在PATH中列出的目錄中的命令,您可以將程序放在PATH的現有目錄中,或者將程序所在的目錄添加到PATH

如果您打算創建一組個人實用程序,我建議您創建一個目錄$HOME/bin並將程序複製到那裏。然後將以下添加到您的登錄腳本(應該是這樣的$ HOME/.login文件或$ HOME/.bashrc中):

export PATH="$PATH:$HOME/bin" 
+0

當我做出口命令時,他停止對基本bash(如ls)的響應,我必須關閉終端並重新打開它,一切恢復正常。我嘗試在/ usr/bin文件夾中創建bash腳本,但它說我沒有權限,sudo不起作用。你能幫我解決嗎? – someoneb100

+0

@ someoneb100你通常不想把自己的東西放在'/ usr/bin'中。奇怪的是'export'聲明不適合你。 –

1

你不能這樣使用system()system()將創建一個子進程,其中將執行指定的命令。

所以如果你執行system("cd"),創建的子進程將會改變它的當前目錄,但父程序(你的代碼)不會知道它。

要做出你想要的,請使用chdir

0

你可以只添加一個別名到〜/ .bashrc文件:

alias wcd='cd /dedicated/dir/path' 

現在,從您的終端的任何地方,只需運行wcd即可移至您的目錄。

如果你想運行ls過於然後:

alias wcd='cd /dedicated/dir/path && ls' 

注:打開〜/。bashrc文件並在最後添加上面的行,然後打開一個新的終端或在現有的終端窗口中運行source ~/.bashrc

相關問題