static void shell_script (void);
static void script (int prompt);
static void cmdline (char *argv[], int optind, int argc);
-static int issue_command (const char *cmd, char *argv[]);
static void initialize_readline (void);
static void cleanup_readline (void);
static void add_history_line (const char *);
" -h|--cmd-help List available commands\n"
" -h|--cmd-help cmd Display detailed help on 'cmd'\n"
" -a|--add image Add image\n"
+ " -D|--no-dest-paths Don't tab-complete paths from guest fs\n"
+ " -f|--file file Read commands from file\n"
" -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n"
" -n|--no-sync Don't autosync\n"
" -r|--ro Mount read-only\n"
int
main (int argc, char *argv[])
{
- static const char *options = "a:h::m:nrv?V";
+ static const char *options = "a:f:h::m:nrv?V";
static struct option long_options[] = {
{ "add", 1, 0, 'a' },
{ "cmd-help", 2, 0, 'h' },
+ { "file", 1, 0, 'f' },
{ "help", 0, 0, '?' },
{ "mount", 1, 0, 'm' },
+ { "no-dest-paths", 0, 0, 'D' },
{ "no-sync", 0, 0, 'n' },
{ "ro", 0, 0, 'r' },
{ "verbose", 0, 0, 'v' },
struct drv *drv;
struct mp *mps = NULL;
struct mp *mp;
- char *p;
+ char *p, *file = NULL;
int c;
initialize_readline ();
drvs = drv;
break;
+ case 'D':
+ complete_dest_paths = 0;
+ break;
+
+ case 'f':
+ if (file) {
+ fprintf (stderr, _("guestfish: only one -f parameter can be given\n"));
+ exit (1);
+ }
+ file = optarg;
+ break;
+
case 'h':
if (optarg)
display_command (optarg);
mount_mps (mps);
}
+ /* -f (file) parameter? */
+ if (file) {
+ close (0);
+ if (open (file, O_RDONLY) == -1) {
+ perror (file);
+ exit (1);
+ }
+ }
+
/* Interactive, shell script, or command(s) on the command line? */
if (optind >= argc) {
if (isatty (0))
}
}
-static int
+int
issue_command (const char *cmd, char *argv[])
{
int argc;
strcasecmp (cmd, "vi") == 0 ||
strcasecmp (cmd, "emacs") == 0)
return do_edit (cmd, argc, argv);
+ else if (strcasecmp (cmd, "lcd") == 0)
+ return do_lcd (cmd, argc, argv);
+ else if (strcasecmp (cmd, "glob") == 0)
+ return do_glob (cmd, argc, argv);
else
return run_action (cmd, argc, argv);
}
"echo", _("display a line of text"));
printf ("%-20s %s\n",
"edit", _("edit a file in the image"));
+ printf ("%-20s %s\n",
+ "lcd", _("local change directory"));
+ printf ("%-20s %s\n",
+ "glob", _("expand wildcards in command"));
/* actions are printed after this (see list_commands) */
}
"\n"
" NOTE: This will not work reliably for large files\n"
" (> 2 MB) or binary files containing \\0 bytes.\n"));
+ else if (strcasecmp (cmd, "lcd") == 0)
+ printf (_("lcd - local change directory\n"
+ " lcd <directory>\n"
+ "\n"
+ " Change guestfish's current directory. This command is\n"
+ " useful if you want to download files to a particular\n"
+ " place.\n"));
+ else if (strcasecmp (cmd, "glob") == 0)
+ printf (_("glob - expand wildcards in command\n"
+ " glob <command> [<args> ...]\n"
+ "\n"
+ " Glob runs <command> with wildcards expanded in any\n"
+ " command args. Note that the command is run repeatedly\n"
+ " once for each expanded argument.\n"));
else if (strcasecmp (cmd, "help") == 0)
printf (_("help - display a list of commands or help on a command\n"
" help cmd\n"
free (argv);
}
+int
+count_strings (char * const * const argv)
+{
+ int c;
+
+ for (c = 0; argv[c]; ++c)
+ ;
+ return c;
+}
+
void
print_strings (char * const * const argv)
{