我正在尝试在C程序中使用system()函数.
例如,我尝试使用system()函数在桌面上创建一个目录.
我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
system("cd c:\\Users\\USER\\Desktop");
system("mkdir test");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,会创建一个目录,但不会在我的桌面上创建.它是在我的项目目录中创建的.
为什么会这样?
我可以在system()函数中使用cd命令吗?如果没有,是否可以替换将与system()一起使用的cd命令?
我正在使用Windows操作系统.我正在尝试使用来自C程序的system(),因为我使用的是cmd程序.
我知道我可以使用WinAPI创建目录而没有任何问题.我不想使用WinAPI,我的问题是如何使用system()使其工作.
我经常想要更改到特定可执行文件所在的目录.所以我喜欢类似的东西
cd `which python`
Run Code Online (Sandbox Code Playgroud)
切换到安装python命令的目录.但是,这显然是非法的,因为cd占用目录,而不是文件.显然有一些regexp-foo我可以做的去除文件名,但这会打败它是一个简单的单行.
我的bash脚本:
#!/bin/bash
cd /tmp
Run Code Online (Sandbox Code Playgroud)
在运行我的脚本之前:
pwd: /
Run Code Online (Sandbox Code Playgroud)
运行我的脚本后:
pwd: /
Run Code Online (Sandbox Code Playgroud)
运行后我的脚本通过采购它:
pwd: /tmp
Run Code Online (Sandbox Code Playgroud)
如何在没有采购脚本的情况下保持脚本的路径?
我想做什么
我已经创建了一个shell脚本,我已添加到我的$ PATH中,它将下载并获取新Laravel项目的所有设置.我希望通过将终端目录更改为新项目文件夹来结束脚本.
根据我现在所理解的,它只是改变了脚本实际运行的子shell的目录.我似乎无法弄清楚如何做到这一点.任何帮助表示赞赏.谢谢!
#! /usr/bin/env bash
echo -e '\033[1;30m=========================================='
## check for a directory
if test -z "$1"; then
echo -e ' \033[0;31m? Please provide a directory name'
exit
fi
## check if directory already exist
if [ ! -d $1 ]; then
mkdir $1
else
echo -e ' \033[0;31m? The '"$1"' directory already exists'
exit
fi
# move to directory
cd $1
## Download Laravel
echo -e ' \033[0;32m+ \033[0mDownloading Laravel...'
curl -s -L https://github.com/laravel/laravel/zipball/master > …Run Code Online (Sandbox Code Playgroud) 好的,这里是我的CMD窗口的复制粘贴
C:\Documents and Settings\Developer>cd /d "D:\"
D:\>cd /c "C:\"
The filename, directory name, or volume label syntax is incorrect.
D:\>
Run Code Online (Sandbox Code Playgroud)
当我在C盘中运行cd/d"D:\"时它工作正常,但是当我在D盘中运行cd/c"C:\"时我得到一个错误
那么如何将目录更改回C盘?
编辑:
这是我的CMD窗口更简单的"复制粘贴"
C:\>cd /d "D:\"
D:\>cd /c "C:\"
The filename, directory name, or volume label syntax is incorrect.
D:\>
Run Code Online (Sandbox Code Playgroud)
是不是因为它不工作的场景......
如果我知道目录中会有一个文件夹,但我不知道它的名字,bash中有一个简单的方法可以进入它吗?如果我想检查以确保当前目录中存在文件夹,可以这样做吗?
我创建了一个指向深层嵌套目录的符号链接.使用符号链接我可以从我的主目录移动到该目录.我想从目标目录移回一个目录,但shell返回到主目录.
[root@pe1800xs ~]# pwd
/root
[root@pe1800xs ~]# mkdir -p abc/def/ghi/jkl/mno/pqr
[root@pe1800xs ~]# ln -s abc/def/ghi/jkl/mno/pqr/ xyz
[root@pe1800xs ~]# cd xyz
[root@pe1800xs xyz]# pwd
/root/xyz
[root@pe1800xs xyz]# pwd -P
/root/abc/def/ghi/jkl/mno/pqr
[root@pe1800xs xyz]# cd ..
[root@pe1800xs ~]# pwd
/root
Run Code Online (Sandbox Code Playgroud)
我想要实现的是当我cd..在pqr目录中执行shell时应该到达mno目录.
如何在不将工作目录更改为项目根的情况下为项目安装依赖项?
你必须执行:
cd /my/project/root && npm install && cd -
Run Code Online (Sandbox Code Playgroud)
我正在寻找像-C的Makefile这样的选项,以便我可以:
npm install -C /my/project/root
Run Code Online (Sandbox Code Playgroud)
有关如何实现这一目标的任何想法?
我正在许多不同的位置处理我的 MATLAB 代码,如果我能让代码知道它在计算机上的位置,那将非常有帮助。到目前为止,我一直在使用 .m 文件。对于 .m 文件,我找到了以下解决方案:
%example 1
cd(fileparts(mfilename('fullpath')))
Run Code Online (Sandbox Code Playgroud)
或者
%example 2
tmp = matlab.desktop.editor.getActive;
cd(fileparts(tmp.Filename));
Run Code Online (Sandbox Code Playgroud)
或者
%example 3
S = dbstack('-completenames');
S(1).file
Run Code Online (Sandbox Code Playgroud)
或者
%example 4
which(mfilename)
Run Code Online (Sandbox Code Playgroud)
但是在 MATLAB 2016a 中,有一个名为 live script 的新功能。这样一来,这些解决方案就不再起作用了。
%For example I would like to do something like this
cd(MLX_FILELOCATION);
%or
which(mlxfilename)
Run Code Online (Sandbox Code Playgroud)
(编辑 III:问题:我无法获得当前打开/执行的 MATLAB 文件的路径/文件位置或名称。使用 *.m-files 这可以通过上面的示例实现。使用 *.mlx-files 它是不可能了。我更喜欢使用 *.mlx-files 而不是 *.m-files。)
在 *.mlx 文件中执行的上述示例的输出:
%example1: mfilename returns the path to the 'MatlabEvaluationHelper' in the 'AppData\Local\Temp'-folder
%example2: output is an empty …Run Code Online (Sandbox Code Playgroud)