我正在创建自己的shell并设置了fork / exec来执行程序。对于没有'/'的命令,我在PATH环境中搜索包含可执行文件的目录。但是,当我尝试在我的shell中使用clear时,告诉我未设置TERM环境变量。我想知道它是否与此有关:
execve(args[0], args, environ);
其中environ =
char* environ[] = {NULL};
我需要放一些东西吗?宁愿不使用execvp。任何帮助表示赞赏
答案 0 :(得分:1)
shell应该为子进程提供自己的环境变量。事实上,几乎所有产生孩子的过程都应该这样做。通常情况下,您会使用String[] STAR = {"*"};
Cursor cursor;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
File file;
cursor =context.getContentResolver().query(uri, STAR, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
int i = 0;
do {
String songName = cursor
.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
path[i] = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DATA));
String albumName = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM));
albumId[i] = cursor
.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
String artist= cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String albumname= cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
artistId[i]=cursor.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID));
}cursor.close();
(请注意缺少<?php
function filter(){
$queryParam=$this->input->get('queryParam');
$res=$array.filter($queryParam);
return $res;
}
?>
),这不会将环境作为参数。
shell也是一种特殊情况,因为它是在将环境传递给子节点之前可以合法地修改环境的过程之一。这意味着您可能最终需要execv
,但您不能简单地在那里传递固定数组。您需要管理要传递给子项的环境,在shell启动时加载您自己的环境,在每个环境修改命令期间修改它,并将其作为e
传递。