【问题标题】:For TTY, Command vs `echo command | bash`对于 TTY,Command 与 `echo command |重击`
【发布时间】:2021-07-23 08:16:49
【问题描述】:

成功了。

#!/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使用管道(第二种方式)运行脚本,什么时候不应该使用管道?

【问题讨论】:

  • 也许您可以使用bash -cxargs

标签: bash docker shell tty


【解决方案1】:

谁能告诉我有什么区别?

区别在于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 无事可做。

【讨论】:

    猜你喜欢
    • 2022-11-09
    • 2016-08-31
    • 2017-10-27
    • 2019-12-20
    • 2010-11-19
    • 2023-03-30
    • 2012-12-18
    • 2014-06-20
    相关资源
    最近更新 更多