বাশ শেল - এসএসএস রিমোট স্ক্রিপ্ট ক্যাপচার আউটপুট এবং প্রস্থান কোড?


23

আমি রিমোট সার্ভারে একটি স্ক্রিপ্ট শুরু করতে শেল ব্যবহার করতে চাই। আমি সেই স্ক্রিপ্টের আউটপুট (এর লগিং বার্তাগুলি) এবং এটি যে প্রস্থান করবে তার প্রস্থান ক্যাপচার করতে চাই।

আমি যদি এটি করি:

ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"

আমি প্রস্থান কোডটি পেয়েছি তবে দূরবর্তী লগিং বার্তাগুলি ক্যাপচার করতে পারি না।

আমি যদি এটি করি:

local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?" 
LOG "${RESULTS}";

আমি আমার লগ ফাংশনটি ব্যবহার করে আমার আউটপুট লগ করতে পারি তবে সঠিক বহির্গমন কোড পাওয়া যায় না বলে মনে করি, আমি যে কোডটি পেয়েছি তা ভেরিয়েবল অ্যাসাইনমেন্টের কোড ass

আমি আমার লগ ফাংশনটি সমস্ত আউটপুট ক্যাপচারের জন্য ব্যবহার করা চালিয়ে যেতে চাই কারণ এটি ফর্ম্যাট করে এবং আমার জন্য একটি ফাইল, সিসলগ এবং স্ক্রিনে জিনিস প্রেরণ করে।

আমি কীভাবে কোনও ফলাফলগুলিতে ক্যাপচার করতে পারি এবং দূরবর্তী স্ক্রিপ্ট থেকে সঠিক প্রস্থান কোড পেতে পারি?


উত্তর:


37

আপনি সঠিক ত্রুটি কোডটি না পাওয়ার কারণ localহ'ল প্রকৃতপক্ষে মৃত্যুদন্ড কার্যকর করা। কমান্ড চালানোর আগে আপনাকে ভেরিয়েবলটি স্থানীয় হিসাবে ঘোষণা করতে হবে।

local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?

আপনি এখানে সমস্যাটি দেখতে পারেন:

$ bar() { foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2
$ bar() { local foo=$(ls asdkjasd 2>&1); echo $?; }; bar
0
$ bar() { local foo; foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2

8

"স্থানীয়" সমস্যাটি বলে মনে হচ্ছে। এটি আমার পক্ষে কাজ করে:

local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?

আপনি ঠিক ছিলেন, কিন্তু জোডানম আরও দ্রুত ছিল!
mconlin

হ্যাঁ, 26 সেকেন্ড।
হউক লেগেছে

5
কোনও ইংরেজী ক্লাস নয় তবে 'আরও দ্রুত' বলা ভুল।
এমটাহেমেড

5
আমি জানি এটি একটি রসিকতা ছিল। আমার ধারণা একটি খারাপ। ইন্টারনেটে কেউ জানে না আপনি কুকুর।
mconlin

এছাড়াও জর্ডানমের উত্তরে ব্যাখ্যা করা হয়েছে যে এটি কেন সমস্যা ছিল :)
ডক্টর জে

2

প্রকৃতপক্ষে, উপরের উত্তরগুলির মধ্যে উভয়ই এসএসএস ত্রুটি কোড এবং বার্তাটিকে আটকে রাখেনি, যা নিম্নলিখিত হিসাবে করা যেতে পারে (আমার কাস্টম ফাংশনগুলি উপেক্ষা করুন):

# move the deployment package from the tmp dir
msg=$(ssh -i "$(eval echo $identity_file)" -o ConnectTimeout=5 "$ssh_user"'@'"$ssh_server" \
sudo -iu "$etl_user" bash "$tgt_deployment_dir"'/src/bash/'"$run_unit/$run_unit"'.sh' \
    -a create-relative-package 2>&1)

# fail on any non-success
export exit_code=$?
export err_msg="network error: ""$msg"
test $exit_code -ne 0 && doExit $exit_code $err_msg
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.