কোনও ফোল্ডারে আমার বর্তমান ডিরেক্টরিটি না পরিবর্তন করে কীভাবে কমান্ড চালাতে পারি?


18

এটি আপনার কাছে অদ্ভুত বলে মনে হতে পারে তবে শেলের বর্তমান ফোল্ডারটি পরিবর্তন না করেই একটি নির্দিষ্ট ফোল্ডারে কমান্ড চালাতে চাই। উদাহরণ - আমি সাধারণত এটি করি:

~$ cd .folder
~/.folder$ command --key
~/.folder$ cd ..
~$ another_command --key

যদিও আমি এরকম কিছু চাই:

~$ .folder command --key
~$ another_command --key

এটা কি সম্ভব?


তুমি কি পারবে না ~/.folder/command --key? commandপ্রয়োজনীয় কি আপনার বর্তমান ডিরেক্টরি হতে হবে ~/.folder?
গ্লেন জ্যাকম্যান

উত্তর:


46

দ্বিতীয়টি এড়াতে চাইলে cdআপনি ব্যবহার করতে পারেন

(cd .folder && command --key)
another_command --key

খুব দ্রুত উত্তর! আমি এমনকি এটি গ্রহণ করতেও পারি না কারণ সিস্টেম আমাকে অনুমতি দেয় না))
তৈমুর ফয়েজরাখমানভ

1
ম্যাজিক প্রথম বন্ধনী! ওটা কিভাবে কাজ করে? +1
সুনির্দিষ্ট

প্রথম বন্ধনীতে কমান্ডগুলি একটি নতুন শেল প্রক্রিয়াতে চালিত হয় সুতরাং ডিরেক্টরি পরিবর্তন করা, এনভায়রনমেন্ট ভেরিয়েবল সেট করা ইত্যাদি প্রথম বন্ধনীতে প্যারেন্ট শেলকে প্রভাবিত করে না যা অন্যান্য কমান্ডগুলি চালায়।
ফ্লোরিয়ান ডিয়েশ

9
আমি পরিবর্তন চাই ;থেকে &&ভাল পরিমাপ জন্য। যদি সিডি ব্যর্থ হয় (যেমন আপনি ডিরেক্টরিটির নাম টাইপ করেছেন) তবে আপনি সম্ভবত কমান্ডটি চালাতে চান না।
গিরিহা

@ Geirha এর মন্তব্যের জন্য +1। এটা সত্যিই একটি গুরুত্বপূর্ণ বিষয়। ওপি, আপনি সম্পাদনা বিবেচনা করবেন?
জায়েবী

8

ছাড়া cd... একবারও নয়। আমি দুটি উপায় খুঁজে পেয়েছি:

# Save where you are and cd to other dir
pushd .folder
command --key
# Get back where you were at the beginning.
popd
another_command --key

এবং দ্বিতীয়:

find . -maxdepth 1 -type d -name ".folder" -execdir command --key \;
another_command --key

1

নির্দিষ্ট ডিরেক্টরিতে কমান্ড চালানোর জন্য একটি সাধারণ বাশ ফাংশন:

# Run a command in specific directory
run_within_dir() {
    target_dir="$1"
    previous_dir=$(pwd)
    shift
    cd $target_dir && "$@"
    cd $previous_dir
}

ব্যবহার:

$ cd ~
$ run_within_dir /tmp ls -l  # change into `/tmp` dir before running `ls -al`
$ pwd  # still at home dir

0

আমার এটি বাশমুক্ত উপায়ে করার দরকার ছিল, এবং অবাক হয়ে গিয়েছিলাম যে এর কোনও উপযোগ নেই ( পরিবর্তিত কার্যনির্বাহী ডিরেক্টরিতে কমান্ড চালানোর অনুরূপ env(1)বা এর মতোই sudo(1)। তাই, আমি একটি সাধারণ সি প্রোগ্রাম লিখেছিলাম যা এটি করে:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

char ENV_PATH[8192] = "PWD=";

int main(int argc, char** argv) {
    if(argc < 3) {
        fprintf(stderr, "Usage: in <dir> <cmd> [<args>...]\n");
        return 1;
    }

    if(chdir(argv[1])) {
        fprintf(stderr, "Error setting working directory to \"%s\"\n", argv[1]);
        return 2;
    }

    if(!getcwd(ENV_PATH + 4, 8192-4)) {
        fprintf(stderr, "Error getting the full path to the working directory \"%s\"\n", argv[1]);
        return 3;
    }

    if(putenv(ENV_PATH)) {
        fprintf(stderr, "Error setting the environment variable \"%s\"\n", ENV_PATH);
        return 4;
    }

    execvp(argv[2], argv+2);
}

ব্যবহারটি এরকম:

$ in /path/to/directory command --key
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.