我们可以通过 /bin/sh 运行 进行哪些系统调用?
Which exactly are the system calls we can run via /bin/sh?
我是 运行 Linux Shell 命令的特定方式,我想弄清楚 运行 的两种方式是否会产生相同的结果。
示例 1:
echo "echo "hi"" | /bin/sh
hi
示例 2:
echo "pwd" | /bin/sh
/root/test
示例 3:
这里,假设有一个名为 test.txt 的文件,其中只包含单词“test”
echo "cat test.txt" | /bin/sh
test
到目前为止,一切似乎都运行良好,但是当我输入以下内容时
echo "cd .." | /bin/sh
什么都没发生,这不应该是这种情况,因为如果我键入 cd ..
而没有 | /bin/sh
并按 Enter,Shell 会带我回到之前的路径这种情况将是 /root
所以,我只想知道可通过 /bin/sh
使用的可用命令的实际列表是什么
在 运行 宁 echo "cd .." | /bin/sh
之后你会回到上一个文件夹,因为上面的命令 运行 是一个新的 shell 实例,它改变了文件夹中的当前路径新子shell,而不是调用者实例。
出于同样的原因,我们从不创建帮助脚本来更改目录,但我们在调用 shell.
的上下文中使用 运行 的别名
你可以用这种方式运行任何命令,但它们是由内部shell执行的,因此只在shell.
内有效
使用 cat
、echo
或 pwd
在屏幕上打印文本是永久性的,即使在内部 shell 退出之后,因为实际上内部 shell 写入其标准输出,并且外部 shell(您正在使用它来键入命令)已将内部 shell 的输出链接到它自己的输出,该输出会显示在屏幕上。
“当前工作目录”的概念不是系统范围的,但它附加到一个进程,如 shell。 cd
命令改变了currentshell的工作目录,但它不影响外部shell的工作目录。此外,由 shell 启动的任何新进程都将从父进程 shell 的工作目录开始,但之后在任一进程中更改目录不会对另一个产生影响。
环境变量是另一个只对当前 shell 有影响的东西,你可以选择是否通过 export
ing 将环境变量传递给子进程.
例如,以下将为您提供“正确”的父目录:
echo "cd ..; pwd" | /bin/sh
我是 运行 Linux Shell 命令的特定方式,我想弄清楚 运行 的两种方式是否会产生相同的结果。
示例 1:
echo "echo "hi"" | /bin/sh
hi
示例 2:
echo "pwd" | /bin/sh
/root/test
示例 3:
这里,假设有一个名为 test.txt 的文件,其中只包含单词“test”
echo "cat test.txt" | /bin/sh
test
到目前为止,一切似乎都运行良好,但是当我输入以下内容时
echo "cd .." | /bin/sh
什么都没发生,这不应该是这种情况,因为如果我键入 cd ..
而没有 | /bin/sh
并按 Enter,Shell 会带我回到之前的路径这种情况将是 /root
所以,我只想知道可通过 /bin/sh
在 运行 宁 echo "cd .." | /bin/sh
之后你会回到上一个文件夹,因为上面的命令 运行 是一个新的 shell 实例,它改变了文件夹中的当前路径新子shell,而不是调用者实例。
出于同样的原因,我们从不创建帮助脚本来更改目录,但我们在调用 shell.
的上下文中使用 运行 的别名你可以用这种方式运行任何命令,但它们是由内部shell执行的,因此只在shell.
内有效使用 cat
、echo
或 pwd
在屏幕上打印文本是永久性的,即使在内部 shell 退出之后,因为实际上内部 shell 写入其标准输出,并且外部 shell(您正在使用它来键入命令)已将内部 shell 的输出链接到它自己的输出,该输出会显示在屏幕上。
“当前工作目录”的概念不是系统范围的,但它附加到一个进程,如 shell。 cd
命令改变了currentshell的工作目录,但它不影响外部shell的工作目录。此外,由 shell 启动的任何新进程都将从父进程 shell 的工作目录开始,但之后在任一进程中更改目录不会对另一个产生影响。
环境变量是另一个只对当前 shell 有影响的东西,你可以选择是否通过 export
ing 将环境变量传递给子进程.
例如,以下将为您提供“正确”的父目录:
echo "cd ..; pwd" | /bin/sh