Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python linux中的cd命令不';当它在子shell中运行时,在shell脚本中执行时不能工作有没有办法使cd在子shell中工作_Python_Bash_Shell - Fatal编程技术网

Python linux中的cd命令不';当它在子shell中运行时,在shell脚本中执行时不能工作有没有办法使cd在子shell中工作

Python linux中的cd命令不';当它在子shell中运行时,在shell脚本中执行时不能工作有没有办法使cd在子shell中工作,python,bash,shell,Python,Bash,Shell,''' 文件名为abc.sh 假设初始路径为/home 和abc.sh conatains代码行 光盘桌面 pwd 当我运行$./abc.sh或$bash.sh时 输出仍然为/home,但未更改为/home/Desktop 尝试使用$source abc.sh运行它 虽然这会提供所需的输出/主页/桌面 现在我的问题是,当我通过python执行这个脚本时,除了source命令之外,有没有其他方法可以实现这一点?当使用os.system('source abc.sh')执行时,它会抛出错误?Ad

''' 文件名为abc.sh

假设初始路径为/home

和abc.sh conatains代码行

  • 光盘桌面

  • pwd

  • 当我运行$./abc.sh或$bash.sh时

    输出仍然为/home,但未更改为/home/Desktop

    尝试使用$source abc.sh运行它

    虽然这会提供所需的输出/主页/桌面


    现在我的问题是,当我通过python执行这个脚本时,除了source命令之外,有没有其他方法可以实现这一点?当使用os.system('source abc.sh')执行时,它会抛出错误?

    Add
    pwd
    after
    cd Desktop
    。它是否显示正确的目录?也许你需要
    cd~/Desktop
    ?你说的“dir在subshell中运行时不会更改”到底是什么意思?脚本中的
    cd
    对运行脚本的shell没有任何影响?如何准确地运行脚本或命令?请回答您的问题,并添加更多关于您到底做了什么、实际发生了什么、您得到了什么输出/结果以及您想要得到什么的详细信息。您是否有一个名为
    abc.sh
    的脚本试图调用同名脚本?请使用别名()或
    source
    命令()。@OllydeVulder,函数而不是别名是最佳做法。(虽然别名可以满足这一要求,但它需要的引号与代码在别名上下文之外的引号不同——特别是在
    cd
    ing到名称中带有空格/quotes/etc的目录时;相比之下,使用函数时,引号与脚本中使用的完全相同)。此外,默认情况下,脚本中的别名是关闭的,但函数仍然在那里工作(导出或源代码时)。@AdnanSheikh,…要清楚,从
    abc.sh
    的角度来看,目录确实会更改(假设
    桌面
    相对于脚本的起始位置是有效的);只是从调用shell的角度来看,它没有。如果不想依赖于脚本的起始位置,请将行更改为
    cd“$HOME/Desktop”| | exit
    ——这样路径是绝对路径,并且如果
    cd
    失败,脚本不会从错误的位置运行
    abc.sh
    (如果脚本是从一个没有
    Desktop
    子目录的目录启动的,则会发生这种情况)。