8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

无法从 GO 函数(FN 项目)执行 bash 命令

Roger Cigol 2月前

187 0

我在 Unity 中创建了一个新的空项目,并假装是一台计算机,结果空项目的重量非常大 - 67mb。我附上了所有软件包和日志,请在此处输入图片描述,输入...

我在 Unity 中创建了一个新的空项目,并假装是一台计算机,结果空项目的重量非常大 - 67mb。我附上了所有软件包和日志 在此处输入图片说明 在此处输入图片说明

我尝试禁用一些软件包,但构建重量最多减少了 2 MB

帖子版权声明 1、本帖标题:无法从 GO 函数(FN 项目)执行 bash 命令
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Roger Cigol在本站《ubuntu》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我正在尝试从具有以下 Dockerfile 的节点 14 的映像构建运行容器构建:FROM ubuntu:18.04RUN apt-get update -y \ && apt-get install -y \ l...

    我正在尝试从具有以下 Dockerfile 的节点 14 的映像构建运行容器构建:

    FROM ubuntu:18.04
    
    RUN apt-get update -y \
        && apt-get install -y \
            libaio1 \
            build-essential \
            unzip \
            curl \
            python \
        && rm -rf /var/lib/apt/lists/*
    
    COPY instantclient-basic-linux.x64-12.1.0.2.0.zip .
    COPY instantclient-sdk-linux.x64-12.1.0.2.0.zip .
    
    RUN mkdir -p /opt/oracle \
        && curl -sL https://deb.nodesource.com/setup_14.x | bash - \
        && apt-get update && apt-get install -y -qq nodejs \
        && unzip instantclient-basic-linux.x64-12.1.0.2.0.zip -d /opt/oracle \
        && unzip instantclient-sdk-linux.x64-12.1.0.2.0.zip -d /opt/oracle \
        && mv /opt/oracle/instantclient_12_1 /opt/oracle/instantclient \
        && ln -s /opt/oracle/instantclient/libclntsh.so.12.1 /opt/oracle/instantclient/libclntsh.so \
        && ln -s /opt/oracle/instantclient/libocci.so.12.1 /opt/oracle/instantclient/libocci.so \
        && rm -rf instantclient-basic-linux.x64-12.1.0.2.0.zip \
        && rm -rf instantclient-sdk-linux.x64-12.1.0.2.0.zip
    
    ENV LD_LIBRARY_PATH=/opt/oracle/instantclient
    ENV OCI_HOME=/opt/oracle/instantclient
    ENV OCI_LIB_DIR=/opt/oracle/instantclient
    ENV OCI_INCLUDE_DIR=/opt/oracle/instantclient/sdk/include
    
    RUN echo '/opt/oracle/instantclient/' | tee -a /etc/ld.so.conf.d/oracle_instant_client.conf \
        && ldconfig
    
    RUN apt-get -y -qq install git \
        && npm install -g pm2
    
    EXPOSE 17001 8000
    

    我能够使用命令成功构建映像 docker build -t oracle-client-image . ,但是当我尝试使用命令运行容器时, Run docker run -d -p 17001:17001 -p 8000:8000 -name oracle-client-container oracle-client-image 容器就会退出。当我这样做时它甚至没有抛出任何错误 docker logs -f oracle-client-container 。Dockerfile 有什么问题吗?

  • 我知道这似乎是一个已经问过的问题,但我找不到我所面临的错误的解决方案。我正在尝试使用 EMSCRIPTEN 在我的 ubuntu hyper-v VM 上构建 Open-Cascade 版本 V7.5.3。我运行...

    我知道这似乎是一个已经问过的问题,但我找不到解决我所面临的错误的办法。

    我正在尝试使用 EMSCRIPTEN 在我的 ubuntu hyper-v VM 上构建 Open-Cascade 版本 V7.5.3。我运行该命令 emcmake cmake ,一切按预期进行,但现在,运行该命令时 emmake make 出现以下错误:

    clang frontend command failed with exit code 139 (use -v to see in vocation)
    Ubuntu clang version 13.0.1-2ubuntu2.2
    Target: wasm32-unknown-emscripten
    Thread model: posix
    clang note diagnostic msg:
    ******************
    
    PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
    Preprocessed source(s) and associated run script(s) are located at:
    .......
    

    考虑到预处理源非常大(37 MB),我将它压缩到公共 git repo 中并附上相关的运行脚本,我必须只与您分享一个 链接 才能访问它们,对此我深表歉意。

    我想知道这个问题的原因是否是因为预处理的源文件非常大(几乎有一百万行代码),在这种情况下,我该如何避免遇到这个错误?

    什么原因可能导致此问题?您对此有什么提示、技巧或解决方法吗?谢谢。

    编辑:这里有更多信息

    EMSCRIPTEN 版本:3.1.39(我需要在当前项目中使用此版本)

    Ubuntu 22

        [  0%] Building CXX object
    src/TKernel/CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o
    PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
    Stack dump:
    0.    Program arguments: /usr/bin/clang++-13 -target wasm32-unknown-emscripten -DEMSCRIPTEN -D__EMSCRIPTEN_major__=3
    -D__EMSCRIPTEN_minor__=1 -D__EMSCRIPTEN_tiny__=5 -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -D_LIBCPP_ABI_VERSION=2 -fno-threadsafe-statics -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/SDL --sysroot=/usr/share/emscripten/cache/sysroot
    -Xclang -iwithsysroot/include/compat -DOCC_CONVERT_SIGNALS -I/home/bm/Downloads/freetype-2.7.1/include
    -I/home/bm/opencascade/include/opencascade -std=c++0x -fexceptions -fPIC -Wall -Wextra -O3 -DNDEBUG -DNo_Exception -DOCCT_NO_PLUGINS -MD -MT src/TKernel/CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o
    -MF CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o.d -c /home/bm/opencascade/src/Resource/Resource_Manager.cxx -o CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o
    1.    <eof> parser at end of file
    2.    Code generation
    3.    Running pass 'Function Pass Manager' on module '/home/bm/opencascade/src/Resource/Resource_Manager.cxx'.
    4.    Running pass 'WebAssembly Instruction Selection' on function '@_ZNK16Resource_Manager5ValueEPKc'
    Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm3sys15PrintStackTraceERNS_11raw_ostreamEi+0x31)[0x7ae0579e5491]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm3sys17RunSignalHandlersEv+0x50)[0x7ae0579e3640]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm3sys15CleanupOnSignalEm+0xfb)[0x7ae0579e4b1b]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(+0xd29195)[0x7ae057929195]
    /lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7ae056442520]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm19SelectionDAGBuilder31HandlePHINodesInSuccessorBlocksEPKNS_10BasicBlockE+0x298)[0x7ae0580ab6b8]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm19SelectionDAGBuilder5visitERKNS_11InstructionE+0x24)[0x7ae0580ab2d4]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm16SelectionDAGISel16SelectBasicBlockENS_14ilist_iteratorINS_12ilist_detail12node_optionsINS_11InstructionELb0ELb0EvEELb0ELb1EEES6_Rb+0x149)[0x7ae058132089]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm16SelectionDAGISel20SelectAllBasicBlocksERKNS_8FunctionE+0x1865)[0x7ae058131af5]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm16SelectionDAGISel20runOnMachineFunctionERNS_15MachineFunctionE+0x7cc)[0x7ae05812f64c]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm19MachineFunctionPass13runOnFunctionERNS_8FunctionE+0xfe)[0x7ae057d2d9de]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE+0x390)[0x7ae057b1a660]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm13FPPassManager11runOnModuleERNS_6ModuleE+0x33)[0x7ae057b201d3]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm6legacy15PassManagerImpl3runERNS_6ModuleE+0x3a8)[0x7ae057b1ac68]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(+0x19856a1)[0x7ae05e5856a1]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZN5clang17EmitBackendOutputERNS_17DiagnosticsEngineERKNS_19HeaderSearchOptionsERKNS_14CodeGenOptionsERKNS_13TargetOptionsERKNS_11LangOptionsEN4llvm9StringRefEPNSE_6ModuleENS_13BackendActionESt10unique_ptrINSE_17raw_pwrite_streamESt14default_deleteISK_EE+0x1291)[0x7ae05e57ffd1]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(+0x1c4371e)[0x7ae05e84371e]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZN5clang8ParseASTERNS_4SemaEbb+0x244)[0x7ae05d81e3f4]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZN5clang13CodeGenAction13ExecuteActionEv+0xa1)[0x7ae05e83fee1]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZN5clang14FrontendAction7ExecuteEv+0x56)[0x7ae05f084d96]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZN5clang16CompilerInstance13ExecuteActionERNS_14FrontendActionE+0x2c6)[0x7ae05efff2f6]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZN5clang25ExecuteCompilerInvocationEPNS_16CompilerInstanceE+0x664)[0x7ae05f0f8464]
    /usr/bin/clang++-13(_Z8cc1_mainN4llvm8ArrayRefIPKcEES2_Pv+0x944)[0x413e54]
    /usr/bin/clang++-13[0x411e46]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(+0x20fd382)[0x7ae05ecfd382]
    /lib/x86_64-linux-gnu/libLLVM-13.so.1(_ZN4llvm20CrashRecoveryContext9RunSafelyENS_12function_refIFvvEEE+0xdd)[0x7ae057928eed]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZNK5clang6driver10CC1Command7ExecuteEN4llvm8ArrayRefINS2_8OptionalINS2_9StringRefEEEEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPb+0x140)[0x7ae05ecfcc60]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZNK5clang6driver11Compilation14ExecuteCommandERKNS0_7CommandERPS3_+0x190)[0x7ae05ecd0760]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZNK5clang6driver11Compilation11ExecuteJobsERKNS0_7JobListERN4llvm15SmallVectorImplISt4pairIiPKNS0_7CommandEEEE+0x8a)[0x7ae05ecd0b4a]
    /lib/x86_64-linux-gnu/libclang-cpp.so.13(_ZN5clang6driver6Driver18ExecuteCompilationERNS0_11CompilationERN4llvm15SmallVectorImplISt4pairIiPKNS0_7CommandEEEE+0xfe)[0x7ae05ece5d1e]
    /usr/bin/clang++-13(main+0x2473)[0x411683]
    /lib/x86_64-linux-gnu/libc.so.6(+0x29d90)[0x7ae056429d90]
    /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x80)[0x7ae056429e40]
    /usr/bin/clang++-13(_start+0x25)[0x40eed5]
    clang: error: clang frontend command failed with exit code 139 (use -v to see invocation) Ubuntu clang version 13.0.1-2ubuntu2.2
    Target: wasm32-unknown-emscripten
    Thread model: posix
    InstalledDir: /usr/bin
    clang: note: diagnostic msg:
    ********************
    
    PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
    Preprocessed source(s) and associated run script(s) are located at:
    clang: note: diagnostic msg: /tmp/Resource_Manager-909270.cpp
    clang: note: diagnostic msg: /tmp/Resource_Manager-909270.sh
    clang: note: diagnostic msg:
    
    ********************
    em++: error: '/usr/bin/clang++-13 -target wasm32-unknown-emscripten
    -DEMSCRIPTEN -D__EMSCRIPTEN_major__=3 -D__EMSCRIPTEN_minor__=1
    -D__EMSCRIPTEN_tiny__=5 -fvisibility=default -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-cxx-exceptions -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -D_LIBCPP_ABI_VERSION=2 -fno-threadsafe-statics -Dunix -D__unix -D__unix__ -Werror=implicit-function-declaration -Xclang -iwithsysroot/include/SDL --sysroot=/usr/share/emscripten/cache/sysroot
    -Xclang -iwithsysroot/include/compat -DOCC_CONVERT_SIGNALS -I/home/bm/Downloads/freetype-2.7.1/include
    -I/home/bm/opencascade/include/opencascade -std=c++0x -fexceptions -fPIC -Wall -Wextra -O3 -DNDEBUG -DNo_Exception -DOCCT_NO_PLUGINS -MD -MT src/TKernel/CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o
    -MF CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o.d -c /home/bm/opencascade/src/Resource/Resource_Manager.cxx -o CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o' failed (returned 139)
    make[2]: *** [src/TKernel/CMakeFiles/TKernel.dir/build.make:647: 
    src/TKernel/CMakeFiles/TKernel.dir/__/Resource/Resource_Manager.cxx.o]
    Error 1
    make[1]: *** [CMakeFiles/Makefile2:962: 
    src/TKernel/CMakeFiles/TKernel.dir/all] Error 2
    make: *** [Makefile:136: all] Error 2
    emmake: error: 'make CFLAGS=-g' failed (returned 2)
    
  • 我正在尝试在 Ubuntu 22.04.4 的 Raspberry Pi 上安装 Node-RED,使用在 Raspberry Pibash 上运行的脚本 <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/

    我正在尝试使用 Ubuntu 22.04.4 在 Raspberry Pi 上运行

    bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
    

    但是当我运行这个脚本时什么也没有发生,如果我用 sudo 运行它,我得到-

    bash: /dev/fd/63: No such file or directory
    

    enter image description here

    跑步后 curl -L https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered

    我明白了

    curl: (7) Failed to connect to localhost port 3128 after 1 ms: Connection refused

    哪里可能存在问题?感谢您的帮助。

  • 背景我使用 Unity 编写代码,使用 C#8.0。我正在制作一款游戏,玩家通过打出具有不同效果的卡牌与敌人战斗(比如 Slay the Spire)。玩家选择卡牌,然后

    背景

    我在 Unity 中使用 C#8.0 进行编码。

    我正在制作一款游戏,玩家通过打出具有不同效果的卡牌与敌人战斗(例如 Slay the Spire )。玩家选择卡牌,然后选择卡牌的目标,然后(如果目标有效)调用卡牌的效果。

    许多不同的游戏对象都可以成为卡片的目标:敌人、玩家角色、其他卡片、回合计数器、天空等。对于每个可以作为目标的对象,我都有它的类实现一个接口:

    public interface ICardTarget
    {
        public bool IsValidTarget(Card targetingCard);
    }
    

    类似地,许多不同的游戏对象可以打牌:玩家角色、敌人、障碍物等等。对于每个可以使用牌的对象,我让它的类实现一个接口:

    public interface ICardUser
    {
        //I don't have anything in here, this is really more of just a tag to group together any card users. Am I using interfaces right?
    }
    

    因此我的场景中的某些对象可能是:

    public class Enemy : ICardTarget, ICardUser
    {
        public bool IsValidTarget(Card targetingCard) {/*...*/}
    
        public string Species {get;set;}
    }
    
    public class PlayerCharacter : ICardTarget, ICardUser
    {
        public bool IsValidTarget(Card targetingCard) {/*...*/}
    
        public float AttackSpeed {get;set;}
        public int Health {get;set;}
    }
    
    public class Weather : ICardTarget
    {
        public bool IsValidTarget(Card targetingCard) {/*...*/}
    
        public bool IsCloudy {get;set;}
    }
    
    public class Boulder: ICardUser
    {
        public int Mass {get;set;}
    }
    

    ETC。

    每张卡牌都定义了哪些类型的目标有效。当玩家(或任何卡牌用户)选择一个对象作为卡牌的目标时,卡牌会将自身传递给 IsValidTarget 函数并接收布尔响应,以判断这是否是该卡牌的有效目标。

    public class Card
    {
        private ICardUser _user;     //reference to this card's user, set somewhere else
        private ICardTarget _target; //reference to this card's target, set somewhere else
    
        public void CheckTarget()
        {
            if (_target.IsValidTarget(this))
            {
                PerformCardEffect();
            }
        }
    
        private void PerformCardEffect() {/*whatever the card does*/}
    }
    

    到目前为止一切顺利!现在卡牌需要对目标对象产生效果,并且还可能对卡牌使用者产生影响。

    问题

    目前,卡牌对该目标对象唯一知道的是,它是一个有效目标(毕竟,ICardTarget 接口保证了这一切)。那么,我该如何执行 取决于目标类型的 ,而无需检查类型和向下转型?同样的问题也适用于卡牌用户:我只知道卡牌来自卡牌用户,我该如何与它交互而不进行向下转型?或者,向下转型并不是我认为的恶魔?

    尝试的解决方案 1

    我并不担心它,并在运行 PerformCardEffect() 时将目标/用户向下转换为实现它的类之一:

    public class Card
    {
        private ICardUser _user;
        private ITarget _target;
    
        public PerformCardEffect()
        {
            if (_target is Weather w)
            {
                w.IsCloudy = true;
            }
            if (_target is Enemy e)
            {
                print(e.Species);
            }
            if (_target is PlayerCharacter p)
            {
                p.AttackSpeed *= 2;
            }
    
           if (_user is PlayerCharacter p)
            {
                p.Health -= 3;
            }
           if (_user is Enemy e)
            {
                e.Health -= 5;
            }
    
            //etc.
        }
    }
    

    对于我来说,这是目前最容易进行迭代的,但我 知道 这是不受欢迎的。

    尝试的解决方案 2

    我修改了 ICardTarget/ICardUser,以便调用正确函数的责任从 Card 转移到它们身上:

    public interface ICardTarget
    {
        //...
        public void SelectCardEffectTarget(Card targetingCard);
        //...
    }
    
    public interface ICardUser
    {
        public void SelectCardEffectUser(Card targetingCard);
    }
    
    public class Enemy : ICardTarget, ICardUser
    {
        //...
        public void SelectCardEffectTarget(Card targetingCard)
        {
            targetingCard.PerformCardEffectTarget(this);
        }
    
        public void SelectCardEffectUser(Card targetingCard)
        {
            targetingCard.PerformCardEffectUser(this);
        }
        //...
    }
    
    public class PlayerCharacter : ICardTarget, ICardUser
    {
        //...
        public void SelectCardEffectTarget(Card targetingCard)
        {
            targetingCard.PerformCardEffectTarget(this);
        }
    
        public void SelectCardEffectUser(Card targetingCard)
        {
            targetingCard.PerformCardEffectUser(this);
        }
        //...
    }
    
    public class Weather : ICardTarget
    {
        //...
        public void SelectCardEffectTarget(Card targetingCard)
        {
            targetingCard.PerformCardEffectTarget(this);
        }
        //...
    }
    
    public class Card
    {
        private ICardUser _user;
        private ITarget _target;
    
        public void CheckTarget()
        {
            if (_target.IsValidTarget(this))
            {
                _target.SelectCardEffectTarget(this);
                _user.SelectCardEffectUser(this);
            }
        }
    
    
        public void PerformCardEffectTarget(Weather w)
        {
            w.IsCloudy = true;
        }
        public void PerformCardEffectTarget(Enemy e)
        {
            print(e.Species);
        }
        public void PerformCardEffectTarget(PlayerCharacter p)
        {
            p.AttackSpeed *= 2;
        }
    
        public void PerformCardEffectUser(Enemy e)
        {
            e.Health -= 5;
        }
        public void PerformCardEffectUser(PlayerCharacter p)
        {
            p.Health -= 3;
        }
    
        //I have to include these calls so that any objects not caught by the above overloaded parameters default to doing nothing.
        public void PerformCardEffectTarget(ICardTarget t) {}
        public void PerformCardEffectUser(ICardUser u) {}
    }
    

    这似乎更好,但需要来回传递大量引用,这不是坏事,但对我来说感觉有点过分。我还必须在 Card 和接口上公开许多方法。

    PS 有没有更简洁的编写 SelectCardEffectTarget()/SelectCardEffectUser() 的方法,这样我就不必在每个子类中重复相同的代码块了?我知道我可以将 ICardTarget/ICardUser 变成一个类,并在那里设置函数,这样它就可以被继承,但这似乎不是适合这种情况的层次结构。

    尝试的解决方案 3(失败)

    我试图利用通用类来指定目标/用户类型,但我无法找到一种方法来包含它并从中获取有用的功能。

    public class CardEffectDetails<T,U> where T : ICardTarget where U : ICardUser
    {
        T Target {get;set;}
        U User {get;set;}
    }
    
    public class Card
    {
        private ICardTarget _target;
        private ICardUser _user;
    
        private void CreateEffectDetails()
        {
            CardEffectDetails<_target.GetType(), _user.GetType()> effectDetails = new();
            //what can I even do with this thing?
        }
    }
    
  • 当我尝试运行:cmd := exec.Command(\'bash\', \'-c\', \'docker ps\')outp, err := cmd.Output()log.Print(\'outp\', outp)if err != nil { log.Fatalln(\'

    当我尝试运行时:

    cmd := exec.Command("bash", "-c", "docker ps")
    outp, err := cmd.Output()
    log.Print("outp", outp)
    if err != nil {
        log.Fatalln("Starting command failed:", err)
    }
    

    我遇到了错误:

    exit status 127
    

    即使安装了 docker 并 docker ps 从终端运行,如果我从 GO 文件运行代码(不使用 FN 项目),docker 也能正常工作。我认为使用 FN 项目将此代码作为函数会导致终端找不到 docker 等命令。

    尝试以下代码:

    cmd := exec.Command("docker", "ps")
    

    出现此错误:

    exec: \"docker\": executable file not found in $PATH
    

    我也尝试了很多其他命令,但都 ls 不起作用。以前有人遇到过这个问题吗?我想这可能是我需要做的配置,或者是需要为 exec 命令或 FN 项目设置的路径问题...(我在 Ubuntu 22.04 上,一切都已更新)任何帮助都非常感谢。

    [编辑] 感谢 Eik 执行建议的代码后,我的 FN 项目环境是:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=2d6affdfa0d4
    FN_MEMORY=128
    FN_TYPE=sync
    FN_FN_ID=01HZ5VWQM6NG8G00GZJ000003Q
    FN_APP_ID=01HZ5VT0E7NG8G00GZJ000003P
    FN_LISTENER=unix:/tmp/iofs/lsnr.sock
    FN_FORMAT=http-stream
    HOME=/home/fn
    
  • 如果它适合你的游戏设计 - 那就没问题。我个人更喜欢一些可以配置的更常见的东西。游戏设计有时会发生非常疯狂的变化)

  • 卡片的用户和卡片的目标是两个不同的组:它们可以重叠(例如,玩家既可以使用卡片,也可以成为卡片的目标),但有些对象可能只存在于一个组中(例如,天气不能使用卡片,但用户可以以天气为目标)。因此,我将它们保留为单独的接口,而不是只制作一个 ICardUserTarget 接口。如果我确实将它们合并为一个接口,我需要在可能永远不会成为目标的对象上包含诸如 IsValidTarget() 之类的内容。这就是您要表达的意思,还是我理解错了?

  • 我建议你考虑的唯一一件事是目标和用户之间的区别。在我看来,它应该只是同一类型的源和目标。然而,这可能不适合你的情况。

  • 是的,类似这样。实际上,您甚至可以列出这些效果。逻辑几乎保持不变。这样做将打开一些配置的大门,并通过组合名称/统计数据/图像(如果需要)/活动效果等“动态”创建新卡。

  • (i) 12.1 已过时。(ii) node-oracledb 不需要 sdk (iii) 切勿使用 Instant Client 设置 ORACLE_HOME,并且不要在运行 ldconfig 后设置 LD_LIBRARY_PATH。Node-oracledb 不使用 OCI_LIB_DIR 或 OCI_INCLUDE_DIR (iv)

  • 感谢您的建议!关于“将效果移出卡片”,您能详细说明一下吗?您是说我应该创建一个类来保存卡片的效果(假设 CardEffect 具有公共方法 Perform(ICardTarget t, ICardUser u)?那么 Card 对象只保存对相应 CardEffect 的引用?(因此在 Card 中,private CardEffect _effect;,然后在需要时调用 _effect.Perform(_target, _user)?)

  • 大声思考,但无论如何,这条消息太大了,无法发表评论。另外,这个问题也有点抽象 =)

    选项 1 (我想这不是你的情况,但仍然如此)

    您可以制作一个统一的界面,以便您的效果可以与之交互。对于角色(攻击、防御、生命值、法力、闪避、暴击几率等),它对我来说效果很好,但如果您的对象差异太大,它看起来不是一个有效的选择。但是,如果您只需要设置 5-10 个参数,它可以是一个选择。

    选项 2 (装箱,当然,但很多情况下是可以的)

    它与选项 1 几乎相同,但作为 Dictionary<string, object> 参数的容器。您可以将任何内容放在那里,并且您的效果可以尝试获取任何所需的参数。在这种情况下,您的效果将不再依赖于卡牌的类型,而主要依赖于应用此效果所需的参数的存在。


    另外,我强烈建议您考虑将效果移出卡片。这样,卡片的通用逻辑将更像是一个容器,其中包含一组要更改的参数和要应用的效果。

  • 这是 Emscripten 的某个旧版本吗?最新版本运行的是 Clang 19。

  • 附注 - 您认为类型的名称是识别您所指的实体(用户)类型的方式,但我认为类的名称应该描绘的不是实体的类型,而是所述实体如何实现其行为(敌人的行为就像敌人,它的行为使它成为敌人,而不是它的类型)

  • 我知道 Cards 和 Users 都可以作为目标,因为它们都实现了 ITarget。但是如果 IUser 本身不显示行为,那为什么要有它呢?似乎 IUser(我个人可能会将其重命名为 ICardUser 以更明确)可以具有您正在寻找的行为。如果 ICardUser 需要您宣布它是什么类型的用户怎么办?它是 Player?敌人?还是 FireEnemy?如果您这样做,那么您就有一个接口,它公开了您需要的属性,并且这些属性将不可避免地在实现 Player、Enemy 等中设置。

  • 。)。同样,如果将来我添加一个新的接口 IHasHealth,Player 和 Enemy 都会实现,会怎么样?理想情况下,我只需添加和我的问题:如何处理默认情况?也就是说,如果我不关心哪个(非 FireEnemy)用户正在使用 Fireball,该怎么办?Fireball 根本不引用其用户的数据,因此任何 IUser 都可以使用它。我似乎无法创建规则所有 IUser 都默认使用这个规则,我必须为 IUser 的每个实现类创建一个规则(

  • 我确实还有另一个问题,但首先介绍一下背景:这是 Fiddle 的一个分支,我在其中添加了一个新的接口 IUser : ITarget 来表示卡的用户。我更新了与规则相关的类,以支持将这些用户数据纳入规则效果的能力(因此现在规则采用了)。我还创建了一个新的类,FireEnemy : Enemy,来演示卡牌使用者如何影响卡牌功能(例如,FireEnemy 使用 Fireball 时会对目标造成额外伤害)。[下一条评论中的问题]

  • 是的,在 /etc/environment 中,我使用 http://localhost:3128 设置了代理变量,但我不知道为什么。我使用的是企业代理,也许这就是原因。

  • 引用 20

    啊,非常感谢!我并没有真正理解 Lippert 的规则方法在课堂上所要表达的意思,但您的具体示例非常棒!

返回
作者最近主题: