我有一个程序a.out,它将在某些文件夹序列中进行设置,每个文件夹都会得到一个a.out,并将在每个文件夹中产生一些结果。我试图并行执行这些相同的程序。如果我在文件夹中,则只需执行./a.out即可运行。我必须在其文件夹中执行a.out,因为a.out在当前目录中查找文件。因此,如果我不在其文件夹中,它将找不到该文件。
运行这些程序是基于rootDir的另一项工作的一部分。我使用的是MATLAB,因此我尝试避免在MATLAB内使用cd,因为每次使用cd都会重新编译MATLAB代码,从而大大降低了代码的速度。
我使用MATLAB代码编写一个CallParallel.sh,其中有以下一行:
for i in ${JobsOnThisNode[@]};do echo $i;done | xargs -n1 -P ${SLURM_NTASKS_PER_NODE} sh -c '"$1"' sh;
基本上,每批并行作业的$ 1都会获得此命令,并以jname和cname递增:
cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/$jname/$cname/ && ./a.out
我已经从rootDir测试了此代码,它成功在另一个文件夹中运行了该程序。但是,当我在bash脚本中执行它时,出现以下错误:
sh: /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1/: Is a directory
sh: &&: command not found
sh: ./a.out: No such file or directory
如果我正确理解它,则它不能识别&&,而cd只能以某种方式检查它是否是目录,而不是实际更改为该目录,因此,在目录中找不到a.out。 rootDir。
当我尝试这样做时:
sh '"cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1"'
我得到:
sh: "cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1": No such file or directory
答案 0 :(得分:2)
sh '"cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1"'
表示,使用"cd /mnt/home/thrust2/zf1005/Matlab/GAFit/RunningFolder/1/1"
来解释sh
,该#! /bin/bash
cd "$1" && /path/to/a.out
不存在。
为简化操作,您可以创建一个以dir作为参数的运行程序脚本
runner
,然后从xargs
中调用a.out
。
顺便说一句,您只需要1 import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
/**
* Modified by Surya Jeet Singh
*/
public class GridLayoutMyAuto extends CoordinatorLayout {
private int row = 4;
private int column = 4;
private double childWidth;
private double childHeight;
private int child_layout;
private boolean width_acc_height = false, height_acc_width = false;
private View[][] grid;
public GridLayoutMyAuto(Context context) {
super(context);
}
public GridLayoutMyAuto(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public GridLayoutMyAuto(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
TypedArray typedArray = context
.obtainStyledAttributes(attrs, R.styleable.GridLayoutMyAuto);
row = typedArray.getInteger(R.styleable.GridLayoutMyAuto_row, 5);
column = typedArray.getInteger(R.styleable.GridLayoutMyAuto_column, 5);
child_layout = typedArray.getResourceId(R.styleable.GridLayoutMyAuto_child_layout,/*R.child_layout.include_item_2048*/-1);
width_acc_height = typedArray.getBoolean(R.styleable.GridLayoutMyAuto_width_acc_height, false);
height_acc_width = typedArray.getBoolean(R.styleable.GridLayoutMyAuto_height_acc_width, false);
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++) {
inflate(context, child_layout, this);
}
}
typedArray.recycle();
}
public void resetLayout() {
requestLayout();
}
public int getRow() {
return row;
}
public int getColumn() {
return column;
}
public View[][] getGrid() {
return grid;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int childCount = getChildCount();
int newHeight = row * (widthMeasureSpec / column);
if (width_acc_height == true) {
widthMeasureSpec = heightMeasureSpec;
} else if (height_acc_width == true) {
heightMeasureSpec = widthMeasureSpec;
}
for (int i = 0; i < childCount; i++) {
View child = getChildAt(i);
int padding = child.getPaddingLeft();
if (child.getVisibility() != View.GONE) {
measureChild(child, widthMeasureSpec / column - 2 * padding, heightMeasureSpec / row - 2 * padding);
}
}
setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onLayout(boolean b, int left, int top, int right, int bottom) {
grid = new View[row][column];
childWidth = (right - left) / (column * 1.0);
childHeight = (bottom - top) / (row * 1.0);
int x;
int y = top;
int count = 0;
for (int i = 0; i < row; i++) {
x = left;
for (int j = 0; j < column; j++) {
View child = getChildAt(count++);
int padding = child.getPaddingLeft();
// padding=18;
child.layout(x + padding, y + padding, (int) (x + childWidth) - padding, (int) (y + childHeight) - padding);
grid[i][j] = child;
x += childWidth;
}
y += childHeight;
}
}
}
而不是每个目录1。