对于 TTY,Command 与 `echo 命令 | bash`
For TTY, Command vs `echo command | bash`
成功了。
#!/usr/bin/env bash
set -x
docker exec -it pure-ftpd ftp localhost
printenv
失败,因为“输入设备不是 TTY”。
#!/usr/bin/env bash
set -x
{
echo "docker exec -it pure-ftpd ftp localhost"
} | {
bash
printenv
}
并且两个脚本的环境变量相同。有人能告诉我有什么区别吗?并且 SDKMAN 使用管道(第二种方式)来 运行 脚本,什么时候不应该使用管道?
Can someone tell me what is the difference?
区别在于docker exec
的输入。
docker exec ... - input is your keyboard
和:
{
echo docker exec ... - your keyboard is ignored, echo does not read from stdin
} | {
bash - The input comes _only_ from echo, which is captured by bash.
}
因为您请求了交互式 TTY -ti
并且因为没有更多的输入(假设“您的键盘被忽略”),docker exec -ti
无事可做。
成功了。
#!/usr/bin/env bash
set -x
docker exec -it pure-ftpd ftp localhost
printenv
失败,因为“输入设备不是 TTY”。
#!/usr/bin/env bash
set -x
{
echo "docker exec -it pure-ftpd ftp localhost"
} | {
bash
printenv
}
并且两个脚本的环境变量相同。有人能告诉我有什么区别吗?并且 SDKMAN 使用管道(第二种方式)来 运行 脚本,什么时候不应该使用管道?
Can someone tell me what is the difference?
区别在于docker exec
的输入。
docker exec ... - input is your keyboard
和:
{
echo docker exec ... - your keyboard is ignored, echo does not read from stdin
} | {
bash - The input comes _only_ from echo, which is captured by bash.
}
因为您请求了交互式 TTY -ti
并且因为没有更多的输入(假设“您的键盘被忽略”),docker exec -ti
无事可做。