วิธี `ส่งออก PATH` จาก C [ปิด]


0

สงสัยว่าจะทำสิ่งใดสิ่งหนึ่งจาก C ให้สำเร็จได้อย่างไรเพื่อให้มันคงอยู่เหมือน~/.bashrcหรือจาก~/.bash_profile:

export PATH=~/bin:$PATH
export PS1="$ "

สงสัยว่าฉันควรใช้execlคำสั่งแบบนี้:

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main (void) {
  return execl("/bin/export", "...", NULL);
}

หรือถ้ามีอีกวิธีสำนวน C เพื่อให้บรรลุสิ่งนี้อย่างถูกต้อง

bash  shell  c 

คำตอบ:


2

คุณไม่สามารถส่งออกตัวแปรจากโปรแกรมไปยังพาเรนต์เชลล์เนื่องจากไม่สามารถแก้ไขสภาพแวดล้อมของกระบวนการอื่นได้

หากคุณต้องการตั้งค่ากระบวนการเด็กดูหรือman setenvman execve

แก้ไข

ความแตกต่างคือ.bashrcการดำเนินการโดยเชลล์เองไม่ใช่โดยกระบวนการย่อยของเชลล์ เนื่องจากมันถูกดำเนินการโดยเชลล์มันสามารถแก้ไขสภาวะแวดล้อมของเชลล์ได้

วิธีเดียวที่จะทำสิ่งนี้คือการสร้างคำสั่งที่เชลล์จะดำเนินการ:

main ()
{
    printf ("PATH=/dir\n");
}

จากนั้นในเชลล์เรียกใช้งานเอาต์พุตจากคำสั่งนั้น:

$(./myenv)

หรือ

./myenv > /tmp/file
source /tmp/file

แต่มันก็ยังคงเป็นเชลล์ที่ปรับเปลี่ยนสภาพแวดล้อมของตัวเองมันทำได้โดยการรันคำสั่งที่สร้างจากบางโปรแกรม


ฉันไม่แน่ใจว่าทำไมฉันต้องการสร้างกระบวนการลูก

ฉันไม่ได้บอกว่าคุณต้องการเพียงแค่มีวิธีการตั้งค่าPATHสำหรับเด็ก ในทางตรงกันข้ามไม่มีวิธีที่จะเปลี่ยนPATHสำหรับกระบวนการอื่นรวมถึงผู้ปกครอง ดังนั้นสิ่งที่คุณต้องการจะเป็นไปไม่ได้
RalfFriedl

ดูเหมือนว่าจะต้องมีวิธีบางอย่างเพราะฉันสามารถเขียนไฟล์ ~ / .bashrc ตัวอย่างข้อมูล PATH และดูเหมือนว่ามันจะได้ผลดังนั้นอาจมีวิธีอื่นที่ฉันไม่คุ้นเคย แต่คำถามนี้เกี่ยวกับ ขอขอบคุณ.

@ LancePollard คุณคิดอย่างไรว่าโปรแกรม C นี้กำลังทำงานอยู่และสภาพแวดล้อมของกระบวนการใดที่คุณต้องการให้มีผลกระทบ
Gordon Davisson

ฉันไม่ชอบอะไรมากฉันแค่อยากให้สามารถตั้งค่าตัวแปรสภาพแวดล้อมจาก C ได้ในทางใดทางหนึ่งและกระบวนการ C จะยาวนาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.